如何解决使用Spring自定义方法安全性表达式的自定义注释继承@PreAuthorize注释
我已经在Spring Boot项目中成功实现了“自定义方法安全性”表达式。
这是我的表情根:
public class CustomMethodSecurityExpressionRoot extends SecurityExpressionRoot implements MethodSecurityExpressionOperations {
public boolean checkTwoParamsAreEqual(Long param1,Long param2){
return param1.equals(param2);
}
//constructor and overridden methods ignored for brevity
}
所有其他方法安全性表达式所需的配置和处理程序均已正确实现。
在我的控制器类中,我做了:
@GetMapping("/test")
@PreAuthorize("checkTwoParamsAreEqual(#id1,#id2)")
public String tst( @RequestParam("id1") Long id1,@RequestParam("id2") Long id2){
return "Voila!!!";
}
这样,当我为id1
和id2
请求参数发出具有相同值的get请求时,它返回Voila!!!
,对于不同的请求参数值,则抛出403异常。这正是我想要的。
现在,我想通过为@PreAuthorize
使用自定义注释类来优化我的上述代码。
我的自定义注释定义为:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Inherited
@PreAuthorize("checkTwoParamsAreEqual(#id1,#id2)")
public @interface PreCheckParamsAreEqual {
}
然后,我通过以下方式更新了控制器:
@GetMapping("/test")
@PreCheckParamsAreEqual
public String tst( @RequestParam("id1") Long id1,@RequestParam("id2") Long id2){
return "Voila!!!";
}
通过此更改,无论我为请求参数id1
和id2
传递什么值,它们始终返回“ Voila !!!”。我不知道如何使用参数创建自定义注释。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。