Shiro实战以及源码解析

2023-05-16

一、明白什么是认证和授权

从百度百科上理解的,感觉非常通俗易懂

你要登机,你需要出示你的 passport 和源 ticket,passport 是为了证明你张三确实是你百张三,这就是 认证;而机票是为了证明你张三确实买度了票可以上飞机,这就是 授权。


二、shiro的概念
1.什么是shiro

2.shiro的特性


3.shiro的核心组件


三、shiro实战debug解析(token是用户输入的,info是从缓存和数据库中查出来的,
认证主要做token和info中密码的判等;授权主要是将注解上的权限或者角色与从数据库中查出来的权限做判等)

1.首先先配置一个Realm类

1.1 然后配置认证的方法,因为配置了拦截路径,所以当用户调用sub.login(token)的方法的时候


会先去AuthenticatingRealm类中调用getAuthenticationInfo方法,如下图所示

 

之后开始回调实现类也就是咱自己实现的doGetAuthenticationInfo这个方法,方法的逻辑大致是获取用户输入框中
输入的token中的principal,然后根据principal去数据库或者缓存中查相应的用户的信息。之后将token中的principal
以及数据库中查询到的password还有自己实现的AuthRealm类的全路径传入到authenticationInfo对象中去,如下图所示

构造完之后返回info对象,接着走下边的assertCredentialsMath方法(),如下图所示


assertCredentialsMath方法()里边会针对token(用户输入的要验证的“用户”)以及info(从数据库里边查的实际的“用户”)里边的密码进行校验,如果对比成功则返回true


1.2 然后配置授权的方法,也就是说当调用到具体方法的时候会去回调这个方法

2.然后配置ShiroConfig类


2.1首先配置SecurityManager类,一般都是这几行代码,其中的入参就是第一步配的那个AuthRealm


2.2然后配置shiro的过滤规则,其中入参就是上一步配置的SecurityManager。里边分别都是登录路径(如果不设置默认会自动寻找Web工程根目录下的"/login"页面),
认证成功后的路径以及没有认证的路径

2.3 配置Filter的权限控制规则


3.之后配置/login的登陆的认证,划红线的都是重点,里边首先生成一个Subject对象,然后生成touken,并且利用
这个token传入到sub.login方法中,这个方法会将token传到SecurityManager,SecurityManager然后传给AuthRealm
的认证方法doGetAuthenticationInfo,之后这个方法里边开始校验账号和密码的逻辑,并且利用XXXMatcher方法校验。

4.校验通过后,可以成功登录到success页面,形成一个闭环

5.用户开始进行相关操作,比如进行查询操作,上边的有注解@RequiresRoles和@RequiresPermissions,
分别用来控制角色和权限,粒度不一样


6.之后会回调AuthRealm的doGetAuthorizationInfo方法,进行校验,形成一个闭环。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Shiro实战以及源码解析 的相关文章

  • win10下的mysql5.7开启binglog

    log bin 61 E node exclude mysql5 7 mysql 5 7 42 binglog mysql bin binlog format 61 ROW server id 61 2 mysql 设置mysql客户端默认
  • mysql Error occurred: Cannot select database.

    问题 PS E node exclude mysql5 7 mysql 5 7 42 winx64 bin gt mysql upgrade u root p force Enter password Error occurred Cann
  • mybatis plus or and 合并写法

    int count 61 hrDeliverEmployContractService selectCount new EntityWrapper lt HrDeliverEmployContractEntity gt eq 34 pool
  • 设计模式(大大提高代码可维护性以及复用性)(持续更新)

    单例 xff08 Singleton xff09 模式 xff1a 某个类只能生成一个实例 xff0c 该类提供了一个全局访问点供外部获取该实例 xff0c 其拓展是有限多例模式 原型 xff08 Prototype xff09 模式 xf
  • 并发量、QPS 和TPS区别

    并发量 xff1a 系统同时处理的request 事务数 可以理解为 xff1a 系统同时处理的request数量 TPS xff1a 每秒处理的查询量 每秒钟request 事务 数量 可以理解为 xff1a 每秒处理的request 数
  • mysql-plus 字段验证策略fieldStrategy

    ignored 不管有没有有设置属性 xff0c 所有的字段都会设置到insert语句中 xff0c 如果没设置值 xff0c 全为null xff0c 这种在update 操作中会有风险 xff0c 把有值的更新为null not nul
  • Navicat 12 for MySQL最新版激活(注册机)

    整个过程在断网环境下 安装包也用刚下载的 转 https blog csdn net zhangli0910 article details 83785147 最新版注册机 43 Navicat下载 xff1a 链接 xff1a https
  • C_INCLUDES must be under the source or output directories

    Android项目N版本切到O版本 xff0c 同一个模块去mm xff0c 报C INCLUDES must be under the source or output directories错误 后来才找到原因 xff0c 是因为该模块
  • “MobaXterm X11 proxy: Unsupported authorisation protocol”解决方法

    服务器无法显示GUI图片问题 在解决这个问题的时候 xff0c 可能很多人都搜到了用sudo的方法 xff0c 但是在我们没有管理权限的情况下 xff0c 这个问题也是能解决的 报错信息 我的报错信息 xff1a MobaXterm X11
  • Linux 并发与竞争

    Linux是一个多任务操作系统 xff0c 肯定会存在多个任务共同操作同一段内存或者设备的情况 xff0c 多个任务甚至中断都能访问的资源叫做共享资源 xff0c 就和共享单车一样 在驱动开发中要注意对 共享资源的保护 xff0c 也就是要
  • linux man手册和设置中文版man手册

    http man he net linux 设置中文版man手册
  • win10宽带连接断网自动重连

    文章目录 1 断开网络连接 xff0c 重命名网络连接2 bat代码 xff1a 检测到断线自动重连3 设置开机自动执行3 1 方式一 xff1a 任务计划程序3 2 方式二 xff1a 用vbs代码开机运行bat 1 断开网络连接 xff
  • ubuntu20环境下使用DevStack安装Openstack-Wallaby(单节点、多节点)

    文章目录 一 单节点部署1 环境准备1 1 镜像源1 2 pip源1 3 安装依赖包 2 OpenStack安装 wallaby2 1 添加 96 stack 96 用户2 2 设置代理2 3 下载devstack xff0c 使用 96
  • 【操作系统】页面置换算法

    页面置换算法 在进程运行过程中 xff0c 若需要访问的物理块不在内存中 xff0c 就需要通过一定的方式来将页面载入内存 xff0c 而此时内存很可能已无空闲空间 xff0c 因此就需要一定的算法来选择内存中要被置换的页面 xff0c 这
  • 前端 好看实用的颜色大全(16进制)

  • 解决linux写入ntfs盘时报错:只读文件系统

    2018 10 28 更新 可能因为在挂载wimdows盘后 xff0c 强制关机造成的 xff0c 可使用 sudo ntfsfix dev 来修复 其中 xff0c 为具体哪个盘 xff0c 例如sudo ntfsfix dev sda
  • 【计算机网络】TCP IP通信处理过程

    1 数据包首部 每个分层中都会对所发送的数据附加一个首部 xff0c 其中包含了该层必要的信息 xff0c 如发送端地址 接收端地址以及协议等相关信息 2 发送数据包 1 xff09 应用程序处理 进行编码处理 xff08 相当于表示层功能
  • 【高性能定时器】 时间轮

    时间轮 简述 顾名思义 xff0c 时间轮就像一个轮子 xff0c 在转动的时候外界会指向轮子不同的区域 xff0c 该区域就可以被使用 因此只要将不同时间的定时器按照一定的方法散列到时间轮的不同槽 xff08 即时间轮划分的区域 xff0
  • 系统调用中断(EINTR)与SIGCHLD信号的处理

    一 被中断的系统调用 EINTR 的理解 1 慢系统调用是 xff1f 2 慢系统调用的类别3 EINTR产生的原因5 一般处理方法 二 SIGCHLD信号的处理 1 SIGCHLD信号的产生2 SIGCHLD信号的处理3 不处理SIGCH
  • 定时器与超时的设置

    一 相关时间函数 1 gettimeofday 2 time 3 clock 二 间隔定时器 1 setitimerval 2 getitimerval 3 实时定时器的使用 三 为阻塞操作设置超时 1 alarm 2 给read 设置读超

随机推荐

  • 解决tomcat启动时,端口被占用问题

    有时候我们启动tomcat的时候 xff0c 会提示端口被占用 xff0c 我们可以用下面的方法解决这个问题 1 进入cmd 2 输入netstat ano findstr 8080 xff08 注 xff1a 8080为被占用的端口名 x
  • Maven实战(六)--- dependencies与dependencyManagement的区别

    在上一个项目中遇到一些 jar 包冲突的问题 xff0c 之后还有很多人分不清楚 dependencies 与 dependencyManagement 的区别 xff0c 本篇文章将这些区别总结下来 1 DepencyManagement
  • VSFTP服务器使用retrieveFileStream返回null的问题

    VSFTP服务器使用retrieveFileStream返回null的问题 最近在使用vsftp在文件存储服务 xff0c 发现使用retrieveFileStream获取文件流的时候 xff0c 怎么获取都是空的 xff0c 网上有说返回
  • Android常用的一些make命令

    1 make jX X表示数字 xff0c 这个命令将编译Android系统并生成镜像 xff0c XX表示可以使用到的CPU核数 xff0c 这在配置好的电脑上特别有用 xff0c 公司的16核ubuntu服务器执行make j16只要不
  • 建造者模式详解

    建造者模式 建造者模式 xff08 Bulider Pattern xff09 是将一个复杂对象的构建过程与它的实现表示分离 xff0c 使得同样的构建过程可以创建不同的表示 xff0c 属于创建型模式 使用创建者模式对于用户而言只需要制定
  • LAMP架构简述

    目录 一 LAMP架构简述 二 各组件作用 三 构建LAMP平台 3 1编译安装Apache httpd服务 3 1 1 关闭防火墙 xff0c 将安装Apache所需软件包转到 opt目录下 3 1 2 安装环境依赖包 3 1 3 设置安
  • SLF4J源码分析

    介绍 官网 xff1a http www slf4j org github xff1a https github com qos ch slf4j SLF4J xff08 Simple Logging Facade for Java xff
  • ssh指定密码登陆远程服务器

    1 ssh远程登录 ssh登录远程服务器 xff0c 一般都通过ssh key方式免密码登陆 xff1b 也可以指定用户名 密码来登陆远程服务器 xff1b 如下 xff1a ssh IP l user p port 或者 ssh user
  • U盘制作ubuntu18.04.6系统安装盘

    U盘制作ubuntu18 04 6系统安装盘 1 1 下载镜像文件 ubuntu 18 04 6 desktop amd64 iso 2 下载u盘制作工具rufus3 15 3 运行rufus3 1 制作unbutun18 04启动U盘 3
  • Gradle全版本资源下载

    使用说明 1 xff0c 官网下载地址https services gradle org distributions 不同版本更改版本号即可 xff0c 官网下载不成功的 xff0c 嫌官网下载速度慢的 xff0c 可以直接在这里下载 2
  • .sh文件无法运行--权限问题

    下载了 sh后缀名脚本 结果双击安装文件时是用gedit打开 试着从终端打开 xff0c 提示 xff1a command not found 最后发现原来是文件的打开权限没有钩选 允许以程序执行文件 在图形界面下无法修改权限 xff0c
  • Android 遇坑之路及解决方案

    一 在状态栏之上弹自定义吐司 1 需求 xff1a UI设计师设计的原型图是在状态栏之上的位置弹一个自定义吐司 xff0c 我们的应用内全部都是沉浸式状态栏 xff0c 将状态栏隐藏掉了的 2 解决方案 xff1a 首先给toast设置ma
  • SCRUM框架包括3个角色、3个工件、5个活动、5个价值

    转自http www scrumcn com agile scrum knowledge library scrum html SCRUM 是一个用于开发和维持复杂产品的框架 Scrum 是一个用于开发和维持复杂产品的框架 xff0c 是一
  • rpm安装mysql报libc.so.X(GLIBC_XXX)(64bit) is needed by

    这个原因和linux本身自带的glibc版本不符合安装要求 xff0c 可以对glibc进行升级 解压 xff1a tar xvf glibc XXX tar gz进入glibc 2 14目录 xff1a cd glibc XXXX创建bu
  • rpm安装mysql

    引言 之前安装mysql都是直接使用tar包安装 xff0c 没有用过rpm xff0c 今天搞了一台腾讯云服务器 xff0c 所以想尝试一种新的安装mysql的方式 xff0c 下面分享安装过程和遇到的问题 第一 下载rpm包 官网地址
  • SpringBoot整合多数据源(Druid+Mybaties)

    SpringBoot整合多数据源 xff08 Druid 43 Mybaties xff09 1 添加pom文件 二 改yml 三 业务代码 1 mapper层 xff0c 注意要将不同库的Mapper xml文件分别存放不同的目录 xff
  • 浏览器 中设置断点调试

    1 xff1a 点击F12进入代码调试页面 xff0c 然后点击source xff0c 点击需要设置断点的地方 xff0c F5刷新 2 xff1a F11向下面执行一步 3 xff1a F10向上面执行一步
  • SpringBoot整合Mybaties

    一 引入pom 1 引入jdbc starter xff0c mybatis starter xff0c mysql connector 二 改yml yml的配置如下 xff1a 千万注意那块儿mapper的映射路径的后缀必须是Mappe
  • 国内下载centos的镜像网站大全

    http isoredirect centos org centos 7 isos x86 64 https blog 51cto com 14260602 2441705
  • Shiro实战以及源码解析

    一 明白什么是认证和授权 从百度百科上理解的 xff0c 感觉非常通俗易懂 你要登机 xff0c 你需要出示你的 passport 和源 ticket xff0c passport 是为了证明你张三确实是你百张三 xff0c 这就是 认证