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

Spring Security中authenticated与isAuthenticated()表达式均可生效的原因问询

问题结论

两种写法都生效是Spring Expression Language (SpEL) 的特性,和Java语言本身无关,底层也不存在名为authenticated的对应成员字段。

具体原理

  • SpEL解析表达式时,默认遵循JavaBean命名规范做属性隐式映射:当表达式中写authenticated这类属性名时,SpEL会自动尝试匹配对应类的isAuthenticated()(boolean类型Getter)、getAuthenticated()方法,不需要底层存在同名成员变量。
  • @PreAuthorize注解中用到的安全表达式根对象为SecurityExpressionRoot类,该类仅定义了public boolean isAuthenticated()方法,没有声明authenticated字段。你写的两种表达式最终都会调用同一个isAuthenticated()方法执行校验逻辑,效果完全一致。
  • 该特性是通用规则,Spring Security中其他同类型布尔校验都支持类似简写,比如isAnonymous()可以简写为anonymous、isRememberMe()可以简写为rememberMe。

内容的提问来源于stack exchange,提问作者Zizheng Tai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:48:01