spring - 在 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 语句。
解决方案
我使用@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 作为建议,可以在验证后将控件传递给方法。
推荐阅读
- python - 如何在python3中序列化一个对象?
- react-native - 2020 年 ionic/cordova 与 react native
- android-studio - Android Studio 如何恢复使用服务而不是运行?
- python - 阿拉伯语 reshaper.reshape() 在 python 中无法正常工作
- graphviz - 如何在 graphviz/dotEditor 中使用现有节点标签/头标签创建新边而不复制新边
- javascript - jquery中的任务同步
- wordpress - Woocommerce:按评级过滤产品,STARS 没有阴影颜色
- python - 排除和过滤石墨烯 django 查询集
- python - 凯拉斯模型。拟合函数有值错误
- python - 如何在 Windows 上编译包含 Python.h 的 C 程序?