• (39.4) Spring Boot Shiro权限管理【从零开始学Spring Boot】


    在读此文章之前您还可能需要先了解:

    (39.1) Spring Boot Shiro权限管理【从零开始学Spring Boot】

    http://412887952-qq-com.iteye.com/blog/2299732

    (基本搭建)

    (39.2). Spring Boot Shiro权限管理【从零开始学Spring Boot】

    http://412887952-qq-com.iteye.com/blog/2299777

    (shiro权限引入)

    (39.3) Spring Boot Shiro权限管理【从零开始学Spring Boot】

    http://412887952-qq-com.iteye.com/blog/2299780

    (shiro 缓存)

    (6). Shiro记住密码

          记住密码实现起来也是比较简单的,主要看下是如何实现的。

    com.kfit.config.shiro.ShiroConfiguration加入两个方法:

    /**

         * cookie对象;

         * @return

         */

        @Bean

        public SimpleCookie rememberMeCookie(){

           System.out.println("ShiroConfiguration.rememberMeCookie()");

           //这个参数是cookie的名称,对应前端的checkboxname = rememberMe

           SimpleCookie simpleCookie = new SimpleCookie("rememberMe");

           //<!-- 记住我cookie生效时间30 ,单位秒;-->

           simpleCookie.setMaxAge(259200);

           returnsimpleCookie;

        }

       

        /**

         * cookie管理对象;

         * @return

         */

        @Bean

        public CookieRememberMeManager rememberMeManager(){

           System.out.println("ShiroConfiguration.rememberMeManager()");

           CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager();

           cookieRememberMeManager.setCookie(rememberMeCookie());

           returncookieRememberMeManager;

        }

     

    rememberMeManager注入到SecurityManager

    @Bean

        public SecurityManager securityManager(){

            DefaultWebSecurityManager securityManager =  new DefaultWebSecurityManager();

           //设置realm.

           securityManager.setRealm(myShiroRealm());

          

           //注入缓存管理器;

           securityManager.setCacheManager(ehCacheManager());//这个如果执行多次,也是同样的一个对象;

          

           //注入记住我管理器;

           securityManager.setRememberMeManager(rememberMeManager());

          

           returnsecurityManager;

        }

     

    ShiroFilterFactoryBean添加记住我过滤器:

    @Bean

        public ShiroFilterFactoryBean shirFilter(SecurityManager securityManager){

           System.out.println("ShiroConfiguration.shirFilter()");

           ShiroFilterFactoryBean shiroFilterFactoryBean  = new ShiroFilterFactoryBean();

          

            // 必须设置 SecurityManager 

           shiroFilterFactoryBean.setSecurityManager(securityManager);

          

          

          

           //拦截器.

           Map<String,String> filterChainDefinitionMap = new LinkedHashMap<String,String>();

          

           //配置退出过滤器,其中的具体的退出代码Shiro已经替我们实现了

           filterChainDefinitionMap.put("/logout", "logout");

          

          

           //配置记住我或认证通过可以访问的地址

            filterChainDefinitionMap.put("/index", "user");

            filterChainDefinitionMap.put("/", "user");

          

          

           //<!-- 过滤链定义,从上向下顺序执行,一般将 /**放在最为下边 -->:这是一个坑呢,一不小心代码就不好使了;

            //<!-- authc:所有url都必须认证通过才可以访问; anon:所有url都都可以匿名访问-->

           filterChainDefinitionMap.put("/**", "authc");

          

           // 如果不设置默认会自动寻找Web工程根目录下的"/login.jsp"页面

            shiroFilterFactoryBean.setLoginUrl("/login");

            // 登录成功后要跳转的链接

            shiroFilterFactoryBean.setSuccessUrl("/index");

            //未授权界面;

            shiroFilterFactoryBean.setUnauthorizedUrl("/403");

          

           shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);

           returnshiroFilterFactoryBean;

        }

     

    主要是加入了:

    //配置记住我或认证通过可以访问的地址

     filterChainDefinitionMap.put("/index", "user");

     filterChainDefinitionMap.put("/", "user");

     

    修改登录界面加入rememberMe复选框:

    login.html中加入:

    <P><input type="checkbox" name="rememberMe" />记住我</P>

     

    这时候运行程序,登录之后跳转到/index页面,然后我们关闭浏览器,然后直接访问/index还是可以访问的,说明我们写的记住密码已经生效了,如果访问http://127.0.0.1:8080/userInfo/userAdd

    话还是需要重新登录的。

          至此spring boot集成shiro就真的告一段落了。

    当然shiro还是博大精深的,还有很多需要大家去研究,在这里博主抛出几个问题(当然博主自己已经实现了):

    问题1如何在登录的时候加入验证码校验;

    问题2如何在thymleaf使用shiro标签,比如:shiro:hasPermission

    问题3:如何限制密码输错3次就不能登录了;

    问题4:如何编写无状态的过滤器;

    问题5:在同一个工程中如何有状态和无状态的过滤器同时并存;(这个问题博主还没解决哦,有谁知道怎么解决的,欢迎留言或者加QQ告知,不胜感激)。

     

     

    【Spring Boot 系列博客】

     

    0)前言【从零开始学Spring Boot :

    http://412887952-qq-com.iteye.com/blog/2291496

     

    1spring boot起步之Hello World【从零开始学Spring Boot:

    http://412887952-qq-com.iteye.com/blog/2291500

    2Spring Boot返回json数据【从零开始学Spring Boot

    http://412887952-qq-com.iteye.com/blog/2291508

    (15)Spring Boot使用Druid和监控配置【从零开始学Spring Boot】

    http://412887952-qq-com.iteye.com/blog/2292362

    16Spring Boot使用Druid(编程注入)【从零开始学Spring Boot

    http://412887952-qq-com.iteye.com/blogs/2292376

    17Spring Boot普通类调用bean【从零开始学Spring Boot】:

    http://412887952-qq-com.iteye.com/blog/2292388

    ......

    (35)Spring Boot集成Redis实现缓存机制【从零开始学Spring Boot】

    http://412887952-qq-com.iteye.com/blog/2294942

     

     

    更多查看博客:http://412887952-qq-com.iteye.com/

     

  • 相关阅读:
    MIFARE Classic S50技术详解
    windown 使用python 自动切换网络
    CPU封装技术介绍
    openssl unicode编译以及VC++2015环境下的问题
    重新开启此博
    Mifare简介
    python全栈(中国历史天气可视化系统)
    cnblog优化指南
    Mysql日志详解
    scrapy抓取所有网站域名
  • 原文地址:https://www.cnblogs.com/hehehaha/p/6147100.html
Copyright © 2020-2023  润新知