我知道这是一个迟到的答案,但是在我们将一些 JavaEE 项目迁移到 Spring 之后,我们基于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中,传递了一个带有所有参数的方法。检查客户端是否有权获取用户组。如果不是:抛出我们的异常并且方法停止。