You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 11:02:39