【已解决】org.apache.shiro.UnavailableSecurityManagerException

【已解决】org.apache.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.

二、原因

这个异常通常是表示 Apache Shiro 没有找到一个有效的 SecurityManager 实例,一般有以下两个含义:

  1. 没有绑定 SecurityManagerThreadContextShiro 会在每个线程的 ThreadContext 中维护一个 SecurityManager 实例。如果在执行 Shiro 操作时,当前线程的 ThreadContext 中没有找到 SecurityManager,就会抛出这个异常。

  2. 没有作为静态单例存在Shiro 也支持将 SecurityManager 作为一个全局的静态单例存在,通常在应用启动时初始化并一直存在。如果没有正确配置这个单例,也会导致无法访问 SecurityManager

出现原因一般有:

  1. 未正确配置 SecurityManagerShiro 在启动时需要配置并初始化 SecurityManager,如果配置缺失或初始化失败,可能导致这个异常。例如,如果你没有在 Shiro 配置文件或代码中指定 SecurityManager 的实现,或者未正确初始化它,Shiro 就无法找到它。

  2. Shiro 配置不正确:通常情况下,Shiro 会通过 IniSecurityManagerFactory 或其他方式加载 SecurityManager 配置。如果配置文件中没有正确配置 SecurityManager 或者加载的配置文件路径不对,Shiro 也无法找到 SecurityManager

  3. 多线程环境中 ThreadContext 没有绑定 SecurityManager:如果你的应用是多线程的,Shiro 需要在每个线程中都能够访问到 SecurityManager。如果没有正确设置,或者使用了线程池等技术,在某些线程中 SecurityManager 可能没有正确绑定,导致此异常。

三、解决方案

原因【2. Shiro 配置不正确】需要检查配置文件,原因【1. 未正确配置 SecurityManager】和原因【3. 多线程环境中 ThreadContext 没有绑定 SecurityManager】可以通过以下代码配置:

@Configuration
public class ShiroConfig {
    @Bean
    public DefaultWebSecurityManager securityManager(MyShiroRealm myRealm) {
    	// 1. 配置 SecurityManager
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
        securityManager.setRealm(myRealm);
		// 3. 多线程环境中 ThreadContext 绑定 SecurityManager
        ThreadContext.bind(securityManager);
        // 其他代码...
        return securityManager;
    }

	//  其他代码...
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨momo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值