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

 

【视频 & 交流平台】

à SpringBoot视频

http://study.163.com/course/introduction.htm?courseId=1004329008&utm_campaign=commission&utm_source=400000000155061&utm_medium=share

à SpringCloud视频

http://study.163.com/course/introduction.htm?courseId=1004638001&utm_campaign=commission&utm_source=400000000155061&utm_medium=share

à Spring Boot源码

https://gitee.com/happyangellxq520/spring-boot

à Spring Boot交流平台

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

 

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

(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实战篇之Shiro

http://study.163.com/course/introduction.htm?courseId=1004523002

 

à Spring Boot交流平台

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

 

 ======================================

Spring Boot Shiro视频实战篇【已更新】

======================================

 

适合人群

有Spring Boot基础的人群。

 

使用技术

(1)spring boot(整合框架)

(2)spring mvc

(3)spring data jpa(持久化操作)

(4)shiro(安全框架)

(5)thymeleaf(模板引擎)

(6)ehcache(缓存管理)

(7)mysql(数据库)

(8)js/css/img(静态资源使用)

9kaptcha(验证码库)

课程目录

1. Spring Boot Shiro介绍

 

2. Spring Boot 搭建无Shiro的框架

 

3. Spring Boot Shiro拦截

 

4. Spring Boot Shiro身份认证准备工作

 

5. Spring Boot Shiro身份认证

 

6. Spring Boot Shiro权限控制

 

7. Spring Boot Shiro缓存

 

8. Spring Boot Shiro记住密码

 

9. Spring Boot Shiro登录成功之后下载favicon.ico

 

10. Spring Boot 在thymeleaf使用shiro标签

 

11. Spring Boot Shiro密码加密算法

 

12.Spring Boot Shiro使用JS-CSS-IMG

 

13. Spring Boot Shiro限制登录尝试次数

 

14.Spring Boot Shiro 验证码

猜你喜欢

转载自412887952-qq-com.iteye.com/blog/2299784
今日推荐