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

向PermissionEvaluator注入Session Bean时实例为null如何解决

问题原因

SessionAuthentication类未被Spring IoC容器托管,类中标注的@Resource依赖注入逻辑不会被执行,这是注入的Session始终为null的根本原因。

Spring的依赖注入能力仅对容器自身创建、管理的Bean生效:其他类中注入能正常生效,是因为这些类本身通过@Component/@Service等构造型注解、或@Bean配置方法被注册到了Spring容器中,容器在实例化这些类时会自动解析、注入所需的依赖。
当前代码中SessionAuthentication既没有添加Spring托管相关注解,也没有在配置类中被注册为Bean,如果你在配置Spring Security权限校验逻辑时是通过new SessionAuthentication()手动创建的实例,这个实例完全脱离Spring容器管理,类上的@Resource注解不会被解析,自然拿不到Session Bean的实例。

修复方法

不要手动new SessionAuthentication实例,将其也注册为Spring容器管理的Bean,使用时直接从容器获取实例即可:

  • 你可以选择直接在SessionAuthentication类上添加@Component注解标记为托管组件,也可以在现有配置类中补充对应的Bean注册逻辑,示例如下:
@Configuration
public class SessionConfiguration {
    @Bean
    public Session returnSession() {
        return new Session();
    }

    @Bean
    public PermissionEvaluator sessionAuthenticationEvaluator() {
        return new SessionAuthentication();
    }
}
  • 在配置Spring Security全局方法权限时,直接注入容器中已经注册好的PermissionEvaluator实例使用,不要手动创建实例。容器在创建SessionAuthentication类型的Bean时,会自动把名为returnSession的Session Bean注入到对应的字段中。

额外注意:当前PermissionEvaluator的实现没有使用传入的认证信息、目标资源标识、权限标识参数,仅判断Session中是否存在用户,会导致所有登录用户默认获得所有资源的访问权限,不符合细粒度授权的设计预期,后续需要补充对应权限判断逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:15:37