SpringBoot + Shiro (四)缓存&记住密码

最终demo

到这节为止,我们已经实现了身份验证和权限验证。但是,如果我们登录之后多次访问http://localhost:8080/userInfo/userDel的话,会发现权限验证会每次都执行一次。这是有问题的,因为像用户的权限这些我们提供给shiro一次就够了。

下面,我们开始给shiro添加缓存支持:

1.添加依赖

        
        
            org.apache.shiro
            shiro-ehcache
            1.2.2
        

        
        
            org.springframework
            spring-context-support
        

2.注入缓存

com.example.demo.config.Shiro.ShiroConfiguration中添加以下方法。

    @Bean
    public EhCacheManager ehCacheManager() {
        System.out.println("ShiroConfiguration.getEhCacheManager()");
        EhCacheManager ehCacheManager = new EhCacheManager();
        ehCacheManager.setCacheManagerConfigFile("classpath:config/ehcache-shiro.xml");
        return ehCacheManager;
    }

将缓存对象注入到SecurityManager中:

    @Bean
    public SecurityManager securityManager() {
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
        securityManager.setRealm(myShiroRealm());
        securityManager.setCacheManager(ehCacheManager()); //注入缓存对象。
        return securityManager;
    }

3.添加配置文件

在src/main/resouces/config中添加ehcache-shiro.xml配置文件:




    

    
    


    
    
    


启动项目,再多次访问http://localhost:8080/userInfo/userDel,这时候只会在后台打印一次配置权限的信息了,说明shiro缓存起了作用。

---------------------下面我们开始配置记住密码-----------

1.在com.example.demo.config.Shiro.ShiroConfiguration中加入下面两个方法:

    //cookie对象;
    @Bean
    public SimpleCookie rememberMeCookie() {
        System.out.println("ShiroConfiguration.rememberMeCookie()");
        //这个参数是cookie的名称,对应前端的checkbox的name = rememberMe
        SimpleCookie simpleCookie = new SimpleCookie("rememberMe");

        //
        simpleCookie.setMaxAge(259200);
        return simpleCookie;
    }

    //cookie管理对象;
    @Bean
    public CookieRememberMeManager cookieRememberMeManager() {
        System.out.println("ShiroConfiguration.rememberMeManager()");
        CookieRememberMeManager manager = new CookieRememberMeManager();
        manager.setCookie(rememberMeCookie());
        return manager;
    }

将rememberMeManager注入到SecurityManager中

@Bean
    public SecurityManager securityManager() {
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
        securityManager.setRealm(myShiroRealm());
        securityManager.setCacheManager(ehCacheManager());
        securityManager.setRememberMeManager(cookieRememberMeManager()); //注入rememberMeManager;
        return securityManager;
    }

ShiroFilterFactoryBean中添加记住我过滤器user,添加user过滤器的资源在记住我或认证之后就可以直接访问了。

Map filterChainDefinitionMap = new LinkedHashMap<>();
...
        filterChainDefinitionMap.put("/index", "user");
        filterChainDefinitionMap.put("/", "user");
....

最后,在login.html页面添加记住我单选框

记住我

启动项目,正常登录后关闭浏览器,再打开浏览器输入http://localhost:8080/index,这时候就可以直接访问index页面,不需要再登录了。

SpringBoot + Shiro (一)基础工程搭建
SpringBoot + Shiro (二)身份校验和角色设置
SpringBoot + Shiro (三)权限
SpringBoot + Shiro (四)缓存&记住密码
SpringBoot + Shiro (五)验证码

最后,感谢几位作者的文章解惑:
springboot整合shiro-登录认证和权限管理
Spring Boot Shiro权限管理【从零开始学Spring Boot】
Spring boot 中使用Shiro


最后打个小广告,闲着没事东拼西凑了个小程序(好多妹子奥),闲着无聊的小伙伴帮我扫扫凑凑人数哈:

SpringBoot + Shiro (四)缓存&记住密码_第1张图片
炱无聊

你可能感兴趣的:(SpringBoot + Shiro (四)缓存&记住密码)