如何在Spring Security@PreAuthorize中评估静态布尔值控制端点访问?
解决方案
当然可以在@PreAuthorize的SpEL表达式里直接访问静态变量来控制权限,你遇到的解析错误是因为多套了一层#{}。
正确写法
直接去掉#{}包裹,@PreAuthorize本身就支持直接解析SpEL表达式:
@GetMapping("/registration") @PreAuthorize("T(com.example.config.ApplicationProperties).REGISTRATION_ENABLE") public String registration() { //... }
为什么之前的写法报错
@ConditionalOnExpression需要#{}是因为它的属性值是普通字符串,必须用#{}明确标记内部是SpEL表达式;而@PreAuthorize的value属性被设计为直接解析SpEL,额外加#{}会让解析器把整个#{...}当成表达式的一部分,自然会抛出语法错误。
补充说明
这种直接通过T()运算符访问静态变量的方式就是最简便的方案,不需要额外创建Bean,只要你的静态变量是public修饰的,就能正常被SpEL解析并用来控制端点访问权限。
内容的提问来源于stack exchange,提问作者Slevin
相关产品推荐
相关产品推荐

