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,当时就被其便捷的功能所震惊.但是那是也没有深入的研究,随着其在业界被应用的越来越广泛,因此决定好好地深入学习一下,将自己的学习心得在此记录,本文 ...
随机推荐
- 【算法和数据结构】_15_小算法_打印EOF的值
/* 本程序打印EOF的值 */ #include <stdio.h> int main(int argc,char* argv[],char* env) { printf("E ...
- 对于使用JDBC连接mysql数据时The server time zone value '¤¤°ê¼Ð·Ç®É¶¡'...的异常问题解决。
相信很多小伙伴和我一样遇到了这类问题,在使用JDBC连接mysql数据库的时候发生SQLException如下所示的异常情况! java.sql.SQLException: The server ti ...
- MFC文件处理
计算机室如何管理自身所存放着的大量的信息的呢?windows的磁盘管理程序为我们提供了一套严密而又高效的信息组织形式--硬盘上的信息是以文件的形式被管理的. 面向存储的文件技术 什么是文件?计算机中, ...
- Python的hasattr(),getattr(),setattr()
今天读到源码时遇到了setattr()和getattr()两方法,给忘了,重新回顾一下吧! 1. hasattr(object, name) 判断object里是否有name属性,有就返回True,没 ...
- spring cloud 学习目录
1.spring cloud简单示例 2.spring cloud快速入门 3.spring cloud 常用 4.spring cloud 原理 5.spring cloud 源码分析 6.spri ...
- dubbo面试题,会这些说明你真正看懂了dubbo源码
整理了一些dubbo可能会被面试的面试题,感觉非常不错.如果你基本能回答说明你看懂了dubbo源码,对dubbo了解的足够全面.你可以尝试看能不能回答下.我们一起看下有哪些问题吧? 1.dubbo中& ...
- 彻底解决COM端口被占用(在使用中)问题的办法
今天就遇到这个问题了串口调试的时候发现usb转串口使用的是COM8而串口调试助手里面只有COM1到4,我想去该COM口发现COM1到7都在使用中,找了好多办法都不行,后面在网上找到这篇解决办法的文章, ...
- 活用RPM获取包的信息
rpm -q 功效大 如果你想要在系统上安装.卸载或是升级软件,需要对系统软件进行查询:或是有如下的场景: 安装了一个软件,需要知道这个软件的版本. 遇到一个文件,不认识它,需要知道它是什么软件,有什 ...
- 【Noip模拟 20160929】选数
题目描述 现在有一排共N个数,你需要从中选出恰好K个.选出K个数后,计算它们两两差值的绝对值的最小值S.你需要确定选出哪K个,才能最大化这个S. 输入数据 输入第一行两个正整数N.K,含义如上. 输入 ...
- RTTI和反射小结
Java有两种方式让我们在运行时识别对象和类的信息:1.“传统的”RTTI,假定所有的类型编译时已知:2.“反射”机制,允许在运行时发现和使用类的信息. 一.RTTI RTTI(Run-Time Ty ...