`

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

阅读更多

 à悟空学院:https://t.cn/Rg3fKJD

学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!

SpringBoot视频:http://t.cn/A6ZagYTi

Spring Cloud视频:http://t.cn/A6ZagxSR

SpringBoot Shiro视频:http://t.cn/A6Zag7IV

SpringBoot交流平台:https://t.cn/R3QDhU0

SpringData和JPA视频:http://t.cn/A6Zad1OH

SpringSecurity5.0视频:http://t.cn/A6ZadMBe

Sharding-JDBC分库分表实战http://t.cn/A6ZarrqS

分布式事务解决方案「手写代码」:http://t.cn/A6ZaBnIr

 

 

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

 

(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告知,不胜感激)。

  

 

【视频&交流平台】

à悟空学院:https://t.cn/Rg3fKJD

学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!

SpringBoot视频:http://t.cn/A6ZagYTi

Spring Cloud视频:http://t.cn/A6ZagxSR

SpringBoot Shiro视频:http://t.cn/A6Zag7IV

SpringBoot交流平台:https://t.cn/R3QDhU0

SpringData和JPA视频:http://t.cn/A6Zad1OH

SpringSecurity5.0视频:http://t.cn/A6ZadMBe

Sharding-JDBC分库分表实战http://t.cn/A6ZarrqS

分布式事务解决方案「手写代码」:http://t.cn/A6ZaBnIr

 

 

à 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 验证码

分享到:
评论
15 楼 林祥纤 2018-03-04  
china494479155 写道

祥哥,我的问题跟3楼一样
1.登陆成功后,再次输入loginUrl,回到登陆页,再输入用户密码,之后登陆不了,有什么可行的解决方案?已经登录过一次,第二次的登录没有触发 doGetAuthenticationInfo 方法,也没有页面跳转。如果是再次进入/index是没有问题的。


这个是已经登录的状态了,需要在前端页面或者后台的login方法做一下处理。
14 楼 china494479155 2018-03-02  

祥哥,我的问题跟3楼一样
1.登陆成功后,再次输入loginUrl,回到登陆页,再输入用户密码,之后登陆不了,有什么可行的解决方案?已经登录过一次,第二次的登录没有触发 doGetAuthenticationInfo 方法,也没有页面跳转。如果是再次进入/index是没有问题的。
13 楼 林祥纤 2017-10-26  
林祥纤 写道
duzj6484 写道
duzj6484 写道
大神,有一个很急的问题。每次走userInfoRepository.findByUsername(username);这个方法上,shiro直接跳出报认证失败,我看了几天了,一直没解决,在查询那块不行我就要用mybitis那一套来实现数据库操作了

可是看着jpa对单表的操作更简单,很想用又不知道为什么


userInfoRepository.findByUsername(username)此方法是否可以返回一个UserInfo对象,

另外确保JPA已经生效了。再不行的话,可以把源码发我邮箱,我有时间可以帮你看看!
JPA应该是生效了,我用CURD里面的findone可以查询到数据,我发现应该是hibernate版本的问题,可我现在并没有解决



-------------------------------
那你降低hibernate版本试试!
12 楼 duzj6484 2017-10-25  
duzj6484 写道
duzj6484 写道
大神,有一个很急的问题。每次走userInfoRepository.findByUsername(username);这个方法上,shiro直接跳出报认证失败,我看了几天了,一直没解决,在查询那块不行我就要用mybitis那一套来实现数据库操作了

可是看着jpa对单表的操作更简单,很想用又不知道为什么


userInfoRepository.findByUsername(username)此方法是否可以返回一个UserInfo对象,

另外确保JPA已经生效了。再不行的话,可以把源码发我邮箱,我有时间可以帮你看看!
JPA应该是生效了,我用CURD里面的findone可以查询到数据,我发现应该是hibernate版本的问题,可我现在并没有解决
11 楼 duzj6484 2017-10-25  
<dependency><groupId>antlr</groupId>
<artifactId>antlr</artifactId>
</dependency>
我用的ecplise4.5,jdk1.8,就运行你的demo的时候报There was an unexpected error (type=Internal Server Error, status=500).
antlr/RecognitionException
我查了网上说的,添加了相应的依赖,还是提示这个错误,您有时间看一下
10 楼 林祥纤 2017-10-24  
duzj6484 写道
duzj6484 写道
大神,有一个很急的问题。每次走userInfoRepository.findByUsername(username);这个方法上,shiro直接跳出报认证失败,我看了几天了,一直没解决,在查询那块不行我就要用mybitis那一套来实现数据库操作了

可是看着jpa对单表的操作更简单,很想用又不知道为什么


userInfoRepository.findByUsername(username)此方法是否可以返回一个UserInfo对象,

另外确保JPA已经生效了。再不行的话,可以把源码发我邮箱,我有时间可以帮你看看!
9 楼 duzj6484 2017-10-24  
duzj6484 写道
大神,有一个很急的问题。每次走userInfoRepository.findByUsername(username);这个方法上,shiro直接跳出报认证失败,我看了几天了,一直没解决,在查询那块不行我就要用mybitis那一套来实现数据库操作了

可是看着jpa对单表的操作更简单,很想用又不知道为什么
8 楼 duzj6484 2017-10-24  
大神,有一个很急的问题。每次走userInfoRepository.findByUsername(username);这个方法上,shiro直接跳出报认证失败,我看了几天了,一直没解决,在查询那块不行我就要用mybitis那一套来实现数据库操作了
7 楼 林祥纤 2016-08-23  
caishancai 写道
验证码如何校验?


研究下shiro 验证码就会了。
6 楼 caishancai 2016-08-22  
验证码如何校验?
5 楼 林祥纤 2016-08-20  
sol0909 写道
你好大神,我的项目是spring boot + oauth2做身份验证和单点登录的,看了你的文章,我想集成shiro的角色权限控制(身份验证oauth2来做),我想用shiro:hasRole标签可是doGetAuthorizationInfo()这个方法进不去,怎么办?还是这种情况不需要shiro?求回复,万分感谢!



这应该是少了一些配置信息,配置如下信息了嘛?


/**
     *  开启shiro aop注解支持.
     *  使用代理方式;所以需要开启代码支持;
     * @param securityManager
     * @return
     */
    @Bean
    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager){
       AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
       authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
       return authorizationAttributeSourceAdvisor;
    }

你可以看下(39.2). Spring Boot Shiro权限管理【从零开始学Spring Boot】 这个章节的。
4 楼 sol0909 2016-08-19  
你好大神,我的项目是spring boot + oauth2做身份验证和单点登录的,看了你的文章,我想集成shiro的角色权限控制(身份验证oauth2来做),我想用shiro:hasRole标签可是doGetAuthorizationInfo()这个方法进不去,怎么办?还是这种情况不需要shiro?求回复,万分感谢!
3 楼 Naylor 2016-08-05  
提几个问题
1.登陆成功后,再次输入loginUrl,回到登陆页,再输入用户密码,死后登陆不了,有什么可行的解决方案?
2.登陆成功后,何时使用session记录当前用户信息?
3.shiro session 能否与spring session 兼容?
2 楼 林祥纤 2016-05-22  
hacker10086 写道
看了你的springboot 刚想集成shiro 你就写出来了 哈哈非常厉害 同时我还想集成下cas

呵呵,那你先研究下,有时间我的话,我也会进行编写的。
1 楼 hacker10086 2016-05-22  
看了你的springboot 刚想集成shiro 你就写出来了 哈哈非常厉害 同时我还想集成下cas

相关推荐

    linux-2.6.39.4源码

    稳定免费的linux源码 作为一个开放源代码的操作系统,Linux附带的源代码库使得广大爱好者有了一个广泛学习、深入钻研的机会,特别是Linux内核的组织极为复杂,同时,又不能像windows平台的程序一样,可以使用集成...

    linux-source-2.6.39.4

    linux-source-2.6.39.4linux-2.6.39.4 kernel source code linux内核代码

    PyPI 官网下载 | mypy-boto3-stepfunctions-1.10.39.4.tar.gz

    《PyPI官网下载:mypy-boto3-stepfunctions-1.10.39.4.tar.gz——Python库解析》 PyPI(Python Package Index)是Python开发者们分享和获取Python软件包的主要平台,它是Python生态系统的核心组成部分。本文将详细...

    PyPI 官网下载 | mypy-boto3-sagemaker-1.10.39.4.tar.gz

    通过boto3,开发者可以创建、管理和控制AWS资源。 3. **SageMaker**:Amazon SageMaker是AWS提供的一种完全托管的服务,用于构建、训练和部署机器学习模型。SageMaker简化了整个机器学习流程,包括数据预处理、选择...

    linux-2.6.39.4 kernel source code linux内核代码

    不知道为什么今天在网上下这个资源这么困难,所以传上来在这保存着,希望能对大家有用。

    Python库 | mypy-boto3-cloudsearch-1.10.39.4.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:mypy-boto3-cloudsearch-1.10.39.4.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Python库 | mypy-boto3-appmesh-1.10.39.4.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:mypy-boto3-appmesh-1.10.39.4.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    IT服务管理手册.doc

    39.4 IT服务的预算及财务管理:涵盖了成本控制、预算编制和财务审计,以确保服务的经济性和效率。 39.5 容量管理:规划和管理IT资源的容量,以满足当前和预期的工作负载需求。 39.6 信息安全管理:实施安全策略,...

    2020年中国在线学习用户年龄分布情况.pptx

    1. **31-40岁**:这一年龄段的用户占据了相当大的比例,大约39.4%,反映出职场人士对提升专业技能和终身学习的重视。他们可能是为了职业发展或兴趣爱好,积极参与在线课程和知识付费服务。 2. **26-30岁**:这个...

    常用CPU电源管理芯片关键脚位

    ### 常用CPU电源管理芯片关键脚位详解 在现代电子设备中,电源管理芯片起着至关重要的作用,特别是对于CPU这样的高性能组件而言。本文将详细介绍几种常见的电源管理芯片的关键脚位及其功能,帮助读者更好地理解这些...

    ovdino-swint-og-coco50.6-lvismv39.4-lvis32.2.pth

    github.com/wanghao9610/OV-DINO模型

    控辍保学工作情况汇报.doc

    ### 控辍保学工作知识点概览 #### 一、控辍保学概念及重要性 - **定义**:控辍保学是指控制学生辍学,保障适龄儿童和青少年完成义务教育阶段学业的一系列措施和活动。 - **重要性**: - 是巩固和发展“两基”...

    小数的意义和读写法学习教案学习教案学习教案.pptx

    例如,7.98秒代表赛跑成绩,1.41米代表身高,39.4千克表示体重,38.20℃表示体温等。 小数的意义在于它能够方便地表示分数,尤其是当分母为10、100、1000等十的倍数时。例如,0.90元、2.85元、5.98元就是货币金额的...

    2028:【例4.14】百钱买百鸡C++

    #include using namespace std; int main() { cout; cout; cout; cout; }

    人教小学数学四年级下册生活中的小数PPT学习教案.pptx

    - 学习小数的含义,如赛跑成绩7.98秒,身高1.41米,体重39.4千克,体温38.2摄氏度,这些都是生活中常见的小数应用。 - 孩子们需要理解小数点后的数字代表的是分数部分,如1米45厘米可转换为1.45米,0.95米表示95...

    调查问卷的结果分析报告.doc

    从社团活动的影响来看,48.5%的学生认为实际体验与预期有很大差距,42.4%的学生认为基本符合预期。社团活动与学习的关系,部分学生认为社团活动对学习有所帮助,但也有一部分人认为社团活动可能影响学习。 综上所述...

    新课标人教第八册数学小数的产生和意义PPT学习教案.pptx

    小数的计数单位是从十分之一(0.1)开始,接着是百分之一(0.01)、千分之一(0.001)等,每个小数位代表的数值都是10的负次幂。例如,0.01表示的是1/100,0.001表示的是1/1000。 在数学中,相邻两个小数计数单位...

    北师大四年级下册小数的意义PPT学习教案.pptx

    如39.4表示39个整数加上4个十分之一,也就是39 + 4 × 0.1 = 39.4。 接着,通过具体的例子,如取单位“1”的三份(10份中的3份),可以表示为0.3,这是十分之三。当单位“1”被分成100份时,取其中的23份可以表示为...

    贴片元件封装

    ### 贴片元件封装详解:从零开始的制作指南 #### 一、元件库的存储与管理 在进行贴片元件封装设计时,首要任务是确保元件库的安全与便捷管理。为此,专家建议将自建元件库独立保存于额外的磁盘分区,避免因Protel ...

Global site tag (gtag.js) - Google Analytics