Shiro自动登陆就是在cookis保存信息,这样子在设置的过期时间前把凭证保存到了浏览器客户端,再次访问就无需要再登陆。

这里只给了实现的部分的代码。

1.在Shiro配置文件里面配置

@Bean(name="securityManager")
    public DefaultWebSecurityManager securityManager(@Qualifier("sessionManager")CustomSessionManager sessionManager, @Qualifier("cookieRememberMeManager")CookieRememberMeManager rememberMeManager) {
        DefaultWebSecurityManager manager=new DefaultWebSecurityManager();
        //配置自定义Realm
        manager.setRealm(customRealm);
        //配置自定义sessionManager
        manager.setSessionManager(sessionManager);
        //配置自定义cacheManager
        manager.setCacheManager(redisCacheManager);
        //配置自定义cookieManager,就是加多了这里
        manager.setRememberMeManager(rememberMeManager);
        HashedCredentialsMatcher matcher = new HashedCredentialsMatcher(); //创建加密对象
        matcher.setHashAlgorithmName("md5"); //加密的算法
        matcher.setHashIterations(1);//加密次数
        customRealm.setCredentialsMatcher(matcher); //放入自定义Realm
        return manager;
    }

    //配置coookie
    @Bean(name="cookieRememberMeManager")
    public CookieRememberMeManager cookieRememberMeManager(){
        CookieRememberMeManager manager = new CookieRememberMeManager();
        SimpleCookie simpleCookie = new SimpleCookie();
        //设置过期时间,秒为单位
        simpleCookie.setName("rememberMe");
        simpleCookie.setMaxAge(86400);
        manager.setCookie(simpleCookie);
        return manager;
    }

2.使用

在Controller里面的登陆方法里面使用一个方法setRememberMe。 值为flase或者为true

System.out.println(user.isRememberMe());
token.setRememberMe(user.isRememberMe());

3.前台传值

可以在表单里面加多这两个就行,记得在实体类加多这一个属性让后台拿到值。

<input type="checkbox" name="rememberMe" value="true"/> 记住我 </br>
<input name="public" type="hidden" value="false">

4.测试

在浏览器F12查看下Cookie就可以看到我们设置的rememberMe。

注意过期时间要配置下我们时区为东八区。

效果图: