关于springboot+shiro权限框架,登陆后关闭浏览器再打开时,在时效期间,记住登录信息的问题

我正在参加「掘金·启航计划」

最近在项目中遇到登陆后关闭浏览器,再次在该浏览器上打开该网站时,需要记住登录信息。于是,研究了一下shiro框架。在Spring Boot Shiro应用中,默认情况下用户登录后关闭浏览器,再重新打开时需要重新登录。这是因为Shiro默认的SessionManager使用DefaultSessionManager,它是基于Servlet容器的HttpSession来处理Session的。为了实现登录后关闭浏览器重新打开记住登录状态,需要将DefaultSessionManager换成EnterpriseCacheSessionDAO。

1. 添加ShiroEhcache依赖

<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-ehcache</artifactId>
    <version>1.4.0</version>
</dependency> 

2. 配置RememberMeManager在ShiroConfig类中配置:

@Bean


public CookieRememberMeManager rememberMeManager() {
    CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager();
    cookieRememberMeManager.setCookie(rememberMeCookie());
    cookieRememberMeManager.setCipherKey(Base64.decode("4AvVhmFLUs0KTA3Kprsdag=="));
    return cookieRememberMeManager;
}

@Bean
public SimpleCookie rememberMeCookie() {
    SimpleCookie simpleCookie = new SimpleCookie("rememberMe");
    simpleCookie.setMaxAge(259200);
    return simpleCookie;
}

3. 配置CacheManager和Cache

@Bean


public EhCacheManager cacheManager() {
    EhCacheManager ehcacheManager = new EhCacheManager();
    ehcacheManager.setCacheManagerConfigFile("classpath:ehcache.xml");
    return ehcacheManager;
}



@Bean

public EnterpriseCacheSessionDAO enterpriseCacheSessionDAO() {
    EnterpriseCacheSessionDAO enterpriseCacheSessionDAO = new EnterpriseCacheSessionDAO();
    enterpriseCacheSessionDAO.setCacheManager(cacheManager());
    enterpriseCacheSessionDAO.setActiveSessionsCacheName("shiro-activeSessionCache");
    return enterpriseCacheSessionDAO; 
}

4. ehcache.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
         updateCheck="true">
   <diskStore path="../java.io.tmpdir/Tmp_EhCache"/>
 
   <cache name="shiro-activeSessionCache" 
          maxEntriesLocalHeap="1000"
          eternal="false" 
          timeToIdleSeconds="0"    
          timeToLiveSeconds="0"
          overflowToDisk="false"
          statistics="true"/>
</ehcache>

5. 将CustomSessionManager注入到SecurityManager中

@Bean


public DefaultWebSecurityManager securityManager() {
    DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
    securityManager.setSessionManager(sessionManager());
    return securityManager;
}



@Bean

public SessionManager sessionManager() {
    CustomSessionManager customSessionManager = new CustomSessionManager();
    customSessionManager.setSessionDAO(enterpriseCacheSessionDAO());
    return customSessionManager;
}

6. 自定义CustomSessionManager扩展DefaultWebSessionManager

public class CustomSessionManager extends DefaultWebSessionManager {
    @Override
    public void setSessionDAO(SessionDAO sessionDAO) {
        DefaultSessionDAO defaultSessionDAO =  (DefaultSessionDAO) sessionDAO;
        defaultSessionDAO.setSessionIdUrlRewritingEnabled(false);
        super.setSessionDAO(sessionDAO);
    }
} 

完成以上配置后,重启应用,登录后关闭浏览器,再打开记住登录状态。通过上述步骤可以实现基于Shiro的Spring Boot应用记住登录状态。

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYO9JUBE' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片