首页 > 解决方案 > 在 Spring AOP 中使用 Aspects 条件执行方法

问题描述

我是 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 语句。

标签: springspring-aop

解决方案


我使用@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 作为建议,可以在验证后将控件传递给方法。


推荐阅读