我已经在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 !!!”。我不知道如何使用参数创建自定义注释。