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的更多相关文章

  1. Spring Boot 学习笔记--整合Thymeleaf

    1.新建Spring Boot项目 添加spring-boot-starter-thymeleaf依赖 <dependency> <groupId>org.springfram ...

  2. Spring Boot 学习笔记--整合Redis

    1.新建Spring Boot项目 添加spring-boot-starter-data-redis依赖 <dependency> <groupId>org.springfra ...

  3. Spring Boot学习笔记 - 整合Swagger2自动生成RESTful API文档

    1.添加Swagger2依赖 在pom.xml中加入Swagger2的依赖 <!--swagger2--> <dependency> <groupId>io.spr ...

  4. Spring Boot 学习笔记(六) 整合 RESTful 参数传递

    Spring Boot 学习笔记 源码地址 Spring Boot 学习笔记(一) hello world Spring Boot 学习笔记(二) 整合 log4j2 Spring Boot 学习笔记 ...

  5. Spring Boot学习笔记2——基本使用之最佳实践[z]

    前言 在上一篇文章Spring Boot 学习笔记1——初体验之3分钟启动你的Web应用已经对Spring Boot的基本体系与基本使用进行了学习,本文主要目的是更加进一步的来说明对于Spring B ...

  6. Spring Boot 最简单整合Shiro+JWT方式

    简介 目前RESTful大多都采用JWT来做授权校验,在Spring Boot 中可以采用Shiro和JWT来做简单的权限以及认证验证,在和Spring Boot集成的过程中碰到了不少坑.便结合自身以 ...

  7. spring boot整合jsp的那些坑(spring boot 学习笔记之三)

    Spring Boot 整合 Jsp 步骤: 1.新建一个spring boot项目 2.修改pom文件 <dependency>            <groupId>or ...

  8. Spring Boot学习笔记(五)整合mybatis

    pom文件里添加依赖 <!-- 数据库需要的依赖 --> <dependency> <groupId>org.mybatis.spring.boot</gro ...

  9. Spring Boot 学习笔记1——初体验之3分钟启动你的Web应用[z]

    前言 早在去年就简单的使用了一下Spring Boot,当时就被其便捷的功能所震惊.但是那是也没有深入的研究,随着其在业界被应用的越来越广泛,因此决定好好地深入学习一下,将自己的学习心得在此记录,本文 ...

随机推荐

  1. C现代编程

    1.C语言没有像面向对象语言一样提供访问控制的功能,无法实现数据隐藏,可以通过规定成员命名来规避这个问题,例如不允许直接访问的成员以“_”开头. 2.模板模式,利用函数指针,抽离固有代码,差异代码放到 ...

  2. wps表格开发C#

    1.需要添加引用etapi.dll,这个dll在你的wps的安装目录下面可以找到. 2.主要的类: Excel.Application:顶层对象 WorkBook:工作簿 WorkSheet:表 Ra ...

  3. C语言中的作用域,链接属性和存储类型

    作用域 当变量在程序的某个部分被声明的时候,他只有在程序的一定渔区才能被访问,编译器可以确认4种不同类型的作用域:文件作用域,函数作用域,代码块作用域和原型作用域 1.代码块作用域:位于一对花括号之间 ...

  4. PyQt5 入门

    换了VSCODE开发,感觉比sublime好点,可能是由于第三版老弹框烦人吧.VSCODE看着也挺好看的. 学习 PyQt5 中文教程 0. 安装完之后错误 pip 安装了 pyqt5 from Py ...

  5. IntelliJ IDEA 性能优化

    idea打开的多了 内存占用也就多了 下边是亲试的优化ide性能的方法 1.设置JVM的启动参数: 进入idea的安装目录的bin文件夹 打开 idea.exe.vmoptions 文件, 修改-Xm ...

  6. 2008nian元旦

    我要做---->> 控制财务状况---1记账 2 炒股或基金 3预算 锻炼---每次要达到锻炼的效果 学习计划-- 1报班架构 2 项目管理 3读书 爱好---做饭,收拾整理 职业规划. ...

  7. 工作流调度器azkaban

    为什么需要工作流调度系统 一个完整的数据分析系统通常都是由大量任务单元组成: shell脚本程序,java程序,mapreduce程序.hive脚本等 各任务单元之间存在时间先后及前后依赖关系 为了很 ...

  8. Azkaban安装及分布式部署(multiple-executor)

    参考文章:https://blog.csdn.net/weixin_35852328/article/details/79327996 官网:https://azkaban.readthedocs.i ...

  9. JavaScript学习-3——数组、函数、递归

    本章目录 -----------①数组 -----------②函数 -----------③递归 一.数组 弱类型:任何类型数据,且没有强度限制: 强类型:同一类型的数据存储的集合(内存中连续存储) ...

  10. 源码的excel导入导出

    获取所有数据,将数据进行有序切割,在进行遍历,将其导出. //设置header header("content-type:text/html;charset=utf-8"); // ...