在Spring AOP中使用Aspects有条件地执行方法

时间:2018-10-19 08:40:41

标签: spring spring-aop

我是Spring AOP的新手。只有在用户被授权的情况下,我才需要执行方法。 这是我的代码。

@Before("some pointcut")
public HttpStatus checkUserAuthentication(String userName)
{
   if( userAuthorized(userName) )
   {
       //go on executing method
   } else {
      return HttpStatus.FORBIDDEN; 
   } 
}

使用JoinPoint时,ProceedingJoinPoint.proceed是否有其他选择?或者可以将ProceedingJoinPoint与@Before建议一起使用?如果用户被授权,如何继续执行if语句。

2 个答案:

答案 0 :(得分:0)

您有一个很好的猜测,即安全性是一个跨领域的考虑。反映了AOP本身。

有一个名为 Spring Security 的spring模块,用于管理身份验证和授权。它在某些部分是通过AOP实现的:)

确实有您要寻找的东西,叫做 Spring Method Security 。我将留下示例,但有关更多信息,请参阅LINK

list(FILTER ${retVal} EXCLUDE REGEX "Posix.")

答案 1 :(得分:0)

我使用@Around建议解决了这个问题。并将返回类型更改为Object,以便在成功验证后可以返回ProceedingJoinPoint。

@Around("some pointcut")
public Object checkUserAuthentication(ProceedingJoinPoint pjp, String userName)
{
   if( userAuthorized(userName) )
   {
       return pjp.roceed();
   } else {
      return new ResponseEntity<>(HttpStatus.FORBIDDEN); 
   } 
}

使用@Around作为建议,可以在验证后将控件传递给方法。