SpringBoot集成Shiro和EhCache,设置登录超时时间无效解决办法。

最开始参考网上的方法,配置了eternal="false",也设置了timeToIdleSeconds和timeToLiveSeconds的值,但是一直没有没有生效,没到半小时就自动登录失效了。原来的配置如下:




    
    


    
    

再看了很多博客后,发现用力错地方~ 并且,解决办法及其简单。。。。


解决办法:


第一步、修改ShiroConfiguration,增加DefaultWebSessionManager()。

增加DefaultWebSessionManager,调用setGlobalSessionTimeout方法,设置全局Session过期时间,单位为毫秒。

话不多说,贴代码:

@Bean
    public DefaultWebSessionManager getDefaultWebSessionManager() {
        DefaultWebSessionManager defaultWebSessionManager = new DefaultWebSessionManager();
        defaultWebSessionManager.setGlobalSessionTimeout(1000 * 60 * 24);// 会话过期时间
        defaultWebSessionManager.setSessionValidationSchedulerEnabled(true);
        defaultWebSessionManager.setSessionIdCookieEnabled(true);
        return defaultWebSessionManager;
    }

第二步、修改ShiroConfiguration,修改DefaultWebSecurityManager()。

修改DefaultWebSecurityManager,调用setSessionManager方法,注入Session管理器。
@Bean(name = "securityManager")
    public DefaultWebSecurityManager defaultWebSecurityManager(MyShiroRealm myShiroRealm) {
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
        //设置realm.
        securityManager.setRealm(myShiroRealm);
        //注入缓存管理器;
        securityManager.setCacheManager(ehCacheManager());
        //注入Session管理器;
        securityManager.setSessionManager(getDefaultWebSessionManager());
        return securityManager;
    }

重启你的项目,就发现万事大吉了。


未设置DefaultWebSessionManager半小时失效的原因如下:


如果我们没有人工注入Session管理器,DefaultWebSecurityManager会注入默认的ServletContainerSessionManager,ServletContainerSessionManager实现了WebSessionManager接口,WebSessionManager继承自SessionManager,SessionManager的抽象实现类AbstractSessionManager设置了默认Session超时时间为半小时。
关键代码和继承实现关系如下面三个图所示,我就不多BB了,自己看吧。

结构图
DefaultWebSecurityManager
AbstractSessionManager

你可能感兴趣的:(SpringBoot集成Shiro和EhCache,设置登录超时时间无效解决办法。)