Spring Boot学习笔记:整合Shiro
Spring Boot如何和Shiro进行整合:
先自定义一个Realm继承AuthorizingRealm,并实现其中的两个方法,分别对应认证doGetAuthenticationInfo和授权doGetAuthorizationInfo。
创建一个ShiroConfig的类,加上@Configuration的注解,这个类就相当于一个shiro的配置文件,可以被spring读取。在ShiroConfig中创建一个方法,此方法的返回值为ShiroFilterFactoryBean,加上@Bean注解,这就就类似在xml文件中添加一个Bean一样,可以被spring管理。ShiroFilterFactoryBean依赖DefaultWebSecurityManager,需要在创建一个DefaultWebSecurityManager的Bean,创建方法和上面类似。DefaultWebSecurityManager依赖Realm,需要创建刚才定义的Realm的Bean。
下面是要继续完善ShiroFilterFactoryBean,设置ShiroFilterFactoryBean的一些属性,如下图:

filterChainDefinitionMap可以过滤哪些url需要某些角色或者权限才能访问。
loginUrl可以设置登陆的url,可以在创建一个登陆的Controller,为"/login",处理get请求,返回一个login.fil或者login.html的视图,视图中登陆的表单数据被提交到loginurl后,会自动被shiro拦截并调用Realm中的认证和授权方法(注意必须是post请求),这个两个方法走完之后,会回到controller,即用于处理post请求的对应的"/login"。网上很多教程中会另外在写一个controller接收登陆是提交表单的数据,然后调用subject.login方法,这个其实是没有必要的,接受post请求的controller并不用手动处理登陆逻辑,shiro的过滤器已经处理。
successUrl登陆成功后跳转的url
这样ShiroFilterFactoryBean就算基本配置好了,后面可以根据业务需求继续完善。
然后就是Realm中两个方法的说明:
doGetAuthenticationInfo方法用于认证,返回AuthenticationInfo,这个接口的实现类是SimpleAuthenticationInfo,构造函数中有四个参数SimpleAuthenticationInfo(Object principal, Object hashedCredentials, ByteSource credentialsSalt, String realmName)。这四个参数的作用分别为:
- principal: the 'primary' principal associated with the specified realm.
- hashedCredentials: the hashed credentials that verify the given principal.
- credentialsSalt: the salt used when hashing the given hashedCredentials
- realmName: the realm from where the principal and credentials were acquired.
登陆的流程:用户访问需要登录的资源,会跳转到登陆页面,即get /login,用户提交账户密码后,会被shiro拦截,在Realm的doGetAuthenticationInfo中接收到表单提交的参数,这个方法的参数是AuthenticationToken,这是一个接口,子接口是RememberMeAuthenticationToken HostAuthenticationToken,实现类是UsernamePasswordToken ,这里面可以接受表单提交的登陆账号和密码。
doGetAuthorizationInfo方法用于授权,返回AuthorizationInfo,这个接口的一个实现类是SimpleAuthorizationInfo,这个类中有三个属性 角色Set<String> roles 权限Set<String> stringPermissions 权限Set<Permission> objectPermissions。接受参数是 PrincipalCollection principalCollection,其中principalCollection.getPrimaryPrincipal()的返回值是SimpleAuthenticationInfo中的第一个参数Oject principal。
END
Spring Boot学习笔记:整合Shiro的更多相关文章
- Spring Boot 学习笔记--整合Thymeleaf
1.新建Spring Boot项目 添加spring-boot-starter-thymeleaf依赖 <dependency> <groupId>org.springfram ...
- Spring Boot 学习笔记--整合Redis
1.新建Spring Boot项目 添加spring-boot-starter-data-redis依赖 <dependency> <groupId>org.springfra ...
- Spring Boot学习笔记 - 整合Swagger2自动生成RESTful API文档
1.添加Swagger2依赖 在pom.xml中加入Swagger2的依赖 <!--swagger2--> <dependency> <groupId>io.spr ...
- Spring Boot 学习笔记(六) 整合 RESTful 参数传递
Spring Boot 学习笔记 源码地址 Spring Boot 学习笔记(一) hello world Spring Boot 学习笔记(二) 整合 log4j2 Spring Boot 学习笔记 ...
- Spring Boot学习笔记2——基本使用之最佳实践[z]
前言 在上一篇文章Spring Boot 学习笔记1——初体验之3分钟启动你的Web应用已经对Spring Boot的基本体系与基本使用进行了学习,本文主要目的是更加进一步的来说明对于Spring B ...
- Spring Boot 最简单整合Shiro+JWT方式
简介 目前RESTful大多都采用JWT来做授权校验,在Spring Boot 中可以采用Shiro和JWT来做简单的权限以及认证验证,在和Spring Boot集成的过程中碰到了不少坑.便结合自身以 ...
- spring boot整合jsp的那些坑(spring boot 学习笔记之三)
Spring Boot 整合 Jsp 步骤: 1.新建一个spring boot项目 2.修改pom文件 <dependency> <groupId>or ...
- Spring Boot学习笔记(五)整合mybatis
pom文件里添加依赖 <!-- 数据库需要的依赖 --> <dependency> <groupId>org.mybatis.spring.boot</gro ...
- Spring Boot 学习笔记1——初体验之3分钟启动你的Web应用[z]
前言 早在去年就简单的使用了一下Spring Boot,当时就被其便捷的功能所震惊.但是那是也没有深入的研究,随着其在业界被应用的越来越广泛,因此决定好好地深入学习一下,将自己的学习心得在此记录,本文 ...
随机推荐
- .net updatePannel 局部刷新效果实现后,但是仍是全部刷新的修改方法
最近做了一个小例子,就是晚上都有的那种小的updatepannel的局部刷新的小例子,但是发现按照那个例子虽然能够实现label2的局部刷新,但是看上去效果确实整个页面都在刷新,这让人很头疼,所以我在 ...
- 测试WCF遇到的一些问题
win7+iis7 1.localhost访问bad request错误. 主机地址不要指定为127.0.0.1.设置为”全部未分配“. 2.错误 500.19(由于权限不足而无法读取配置文件)的问题 ...
- Java内存泄漏的几种可能
Java内存泄漏引起的原因: 内存泄漏是指无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成内存空间的浪费称为内存泄漏. 长生命周期的对象持有短生命周期对象的引用就很可能发 ...
- jpg转yuv420抠图后转为jpg
最近遇到个需求,已有全景图和其中的人脸坐标,将人脸小图从全景图中抠出来,最开始使用libjpeg,奈何使用libjpeg将jpg转为yuv420的资料实在少,libjpeg自身的readme和exam ...
- http stream
http stream 博客分类: http://canofy.iteye.com/blog/2097876 j2EE StringBuilder sb = new StringBuilder() ...
- Http的那些事: Content-Type
Content-Type 无疑是http中一个非常重要的属性了, request 中可以存在, 也可以不存在( request的Content-Type 默认是 */*, 实际上呢, 如果不存在Con ...
- 201772020113李清华《面向对象程序设计(java)》第一周学习总结
201772020113<面向对象程序设计(java)>第一周学习总结 第一部分:课程准备部分 填写课程学习 平台注册账号, 平台名称 注册账号 博客园:www.cnblogs.com b ...
- linux安装jdk8
1.文件准备 jdk-8u201-linux-x64.tar.gz 下载地址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8- ...
- 关于Shader的学习记录
float4 _EmissiveColor; float4 _AmbientColor; float _MySliderValue; void surf (Input IN, inout Surfac ...
- H5页面input输入框含有键盘自带的表情符时显示异常
在做一个关于新闻的评论功能的H5页面时,需求里面要求能够发送表情显示表情,如果使用自定义的表情库,则在评论也还要加载大量的表情符图片,极大的影响加载速度,消耗流量,去看了下别的新闻网页版的评论部分也没 ...