2013-07-29 127 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与所有参数被传递的方法。检查客户端是否有权获取用户组。如果它不是:抛出我们的异常和方法停止。

相关问题