Springboot整合Shiro报 UnavailableSecurityManagerException异常的处理

在Springboot应用中整合Shiro时遇到了UnavailableSecurityManagerException错误,该错误表明SecurityManager未被正确配置。问题根源在于未将securityManager对象绑定到ThreadContext或作为静态单例。解决方案是在配置bean时确保手动设置并绑定securityManager,如下所示:

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Springboot整合Shiro报 UnavailableSecurityManagerException异常的处理

org.apache.shiro.UnavailableSecurityManagerException: No SecurityManager accessible to the calling code, either bound to the org.apache.shiro.util.ThreadContext or as a vm static singleton.  This is an invalid application configuration.
	at org.apache.shiro.SecurityUtils.getSecurityManager(SecurityUtils.java:123)
	at org.apache.shiro.subject.Subject$Builder.<init>(Subject.java:626)
	at org.apache.shiro.SecurityUtils.getSubject(SecurityUtils.java:56)

在Springboot整合Shiro报以上错误,千万别划走了。
以上错误是在Springboot整合Shiro时报的一个错误,该错误的意思是:
不可用的SecurityManager异常:
调用代码无法访问SecurityManager,无论是绑定到org.apache.shiro.util.ThreadContext还是作为vm静态单例。这是无效的应用程序配置。位于org.apache.shiro.SecurityUtils.getSecurityManager(SecurityUtils.java:123)

发生此错误的主要原因在于,我们在SpringBoot中创建Shiro的安全管理器对象securityMannger对象时,要么绑定到ThreadContext中,要么作为虚拟机的静态单例。

导致此错误的主要原因是,我们在配置SecurityManager bean时,没有手动绑定securityMannger对象,如下:

// 安全管理器对象创建
    @Bean
    public SecurityManager securityManager(EmployeeRealm employeeRealm) {
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
        securityManager.setRealm(employeeRealm);
        ThreadContext.bind(securityManager);
        return securityManager;
    }

这样问题就解决了。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值