2013-07-29 116 views
4

我是新來的Spring AOP(AOP和一般),需要執行以下操作:如何使用Spring AOP實現基於註解的安全性?

@HasPermission(operation=SecurityOperation.ACTIVITY_EDIT, object="#act") 
public Activity updateActivity(Activity act) 
{ 
    ... 
} 

@HasPermission是我自定義的註釋,這將被用於標記需要預授權的所有方法。我正在使用基於Apache Shiro的安全檢查的自定義實現。通常,我想我需要定義與所有註釋方法相匹配的切入點,並提供方面的實現(無論是之前還是之前)。

問題我有重新。方面的實現。

  • 我如何提取操作對象從註釋參數?
  • 如何解析對象定義中的SpEL表達式並將對象作爲「act」參數傳遞?
+2

我正在尋找相同的主題。我希望Spring有適當的AOP /安全註釋,而不是使用自定義註釋。它看起來像我找到了一個教程,可能會適應您的情況http://java.dzone.com/articles/spring-aop-security –

+0

請檢查我的答案 - 它允許獲取方法信息信息來處理自定義註釋http: //stackoverflow.com/a/13420500/241986 –

回答

0

我知道這是一個遲到的答案,但我們遷移一些JavaEE的項目開春後我們做了基於AspectJ的一些基本的安全模型:

首先我們詮釋我們的定製服務方式@OperationAuthorization

@OperationAuthorization 
public ListOfUserGroupsTo getUserGroupsByClientId(Integer clientId) throws GenericException { 
    return userGroupRepository.getAllUserGroupsForClient(clientId); 
} 

然後我們有一類具有@Aspect & @Component註解其中攔截與特定的註釋的方法:

@Aspect 
@Component 
public class AuthorizationAspect { 

@Autowired 
AuthorizationService authorizationService; 

@Before(value = "@annotation(ch.avelon.alcedo.authorization.annotations.OperationAuthorization)") 
public void before(JoinPoint joinPoint) throws Throwable { 
    Object[] args = joinPoint.getArgs(); 
    Method method = ((MethodSignature) joinPoint.getSignature()).getMethod(); 

    authorizationService.checkOperationAuthorization(method, args); 
} 

AuthorizationService與所有參數被傳遞的方法。檢查客戶端是否有權獲取用戶組。如果它不是:拋出我們的異常和方法停止。

相關問題