2013-10-02 53 views
1

我想在每個方法執行前檢查服務類中的用戶權限。這是我目前的做法:在注入spring bean和自定義註釋的方法的開始處做些什麼

appContext.xml:

<bean id="requestSeviceImpl" class="services.impl.RequestSeviceImpl"> 
    <property name="permissionService" ref="permissionServiceImpl" /> 
    ... 
</bean> 

實現:

public class RequestServiceImpl implements RequestService 
{ 
    private PermissionService permissionService; 
    ... 

    public void setPermissionService(PermissionService permissionService) 
    { 
     this.permissionService = permissionService; 
    } 

    @Override 
    @Transactional 
    public RequestResultModel submitRequest(Request request) 
    { 
     if(permissionService.isCurrentUserAuthorized(request,"submit")) 
     { 
      //submit request 
     } 
     //throw a permission exception 
    } 

    @Override 
    @Transactional 
    public void sendRequest(Request request) 
    { 
     if(permissionService.isCurrentUserAuthorized(request,"send")) 
     { 
      //send request 
     } 
     //throw a permission exception 
    } 

    ... 
} 

我想要的是處理權限在我的自定義註釋(@Secure)檢查;它應該使用permissionService檢查權限,並在必要時拋出權限異常。而且我不想重新實例requestServiceImpl或permissionServiceImpl類(它應該使用的Spring beans):

@Override 
@Transactional 
@Secure(...) 
public RequestResultModel submitRequest(Request request) 
{ 
    //submit request 
} 

我怎麼能這樣做呢?

+1

這不是一個簡單的任務。 [您可以使用正式文檔中所述的Aspect Oriented Programming](http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/aop.html)。 –

回答

0

我想到的唯一方法是通過 Aspect Oriented Programming (AOP)。你可以使用Spring AOP或AspectJ。你可能想看看AspectJ in Action這本書。第一章作爲示例提供,並解釋您可以使用AspectJ做什麼。後面的章節使用示例代碼來完成你正在做的事情,確保方法的安全。