我是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语句。
答案 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作为建议,可以在验证后将控件传递给方法。