您现在的位置是:首页 > 正文

Spring Boot整合Shiro——基础知识

2024-04-01 01:03:27阅读 4

一、shiro基础知识

Shiro是Apache下的一个开源项目,我们称之为Apache Shiro。它是一个很易用与Java项目的的安全框架,提供了认证、授权、加密、会话管理,与spring Security 一样都是做一个权限的安全框架,但是与Spring Security 相比,在于 Shiro 使用了比较简单易懂易于使用的授权方式。shiro属于轻量级框架,相对于security简单的多,也没有security那么复杂。

“三个”关键点如下:

Subject:主体,代表了当前 “用户”,这个用户不一定是一个具体的人,与当前应用交互的任何东西都是 Subject,如网络爬虫,机器人等;即一个抽象概念;所有 Subject 都绑定到 SecurityManager,与 Subject 的所有交互都会委托给 SecurityManager;可以把 Subject 认为是一个门面;SecurityManager 才是实际的执行者;

SecurityManager:安全管理器;即所有与安全有关的操作都会与 SecurityManager 交互;且它管理着所有 Subject;可以看出它是 Shiro 的核心,它负责与后边介绍的其他组件进行交互,如果学习过 SpringMVC,你可以把它看成 DispatcherServlet 前端控制器;

Realm:域,Shiro 从从 Realm 获取安全数据(如用户、角色、权限),就是说 SecurityManager 要验证用户身份,那么它需要从 Realm 获取相应的用户进行比较以确定用户身份是否合法;也需要从 Realm 得到用户相应的角色 / 权限进行验证用户是否能进行操作;可以把 Realm 看成 DataSource,即安全数据源。

二、步骤

1.自定义Reaml获取安全数据

自定义SabRealm继承AuthorizingRealm类,并且重写了认证doGetAuthenticationInfo方法和授权doGetAuthorizationInfo方法。特别注意return new SimpleAuthenticationInfo(user, user.getPassword(), ByteSource.Util.bytes(user.getSalt()), getName());这里的user必须实现Serializer接口,并且这个user对象必须是DTO,不要用PO,否则会出现Session问题。

2. 自定义SessionManager

在传统的项目中,shiro默认从cookie读取sessionId来维持会话,在分布式环境中,每个JVM会维持自己的session,无法识别其他JVM的session。因此,在分布式环境中,选择将sessionId作为key把session集中保存在redis,JVM通过从请求头中读取登录时返回的sessionId,再根据这个sessionId查询redis读取session,以此实现session共享。因此自定义类SabSessionManager继承DefaultWebSessionManager,并需要重写shiro获取sessionId的方法,该方法位于shiro的session管理器中,只需要自定义session管理器并重写该方法,同时在pom引入的shiro-redis开源工具包,该工具包实现了将session信息保存在redis的方法(shiro默认是保存在内存)。这里返回给浏览器的sessionId的属性是Authorization,登陆以后每次请求只需要如下图所示带上该请求头即可

3. 配置shiroConfig

注意这里的RedisManager的host的格式是host+":"+port,例如127.0.0.1:6379,这里的散列算法采用md5,散列2次。

... ...

... ...

剩下的具体步骤请参见原文:Spring Boot整合分布式Shiro_shiro 分布式_DavidQian谛听的博客-CSDN博客

网站文章

  • OAuth2:开放授权的强大工具

    OAuth2:开放授权的强大工具

    OAuth2,全称Open Authorization 2.0,是一种开放授权协议,它为互联网上的应用提供了一种安全、灵活的身份验证和授权方式。在OAuth2协议下,用户可以将自己的信息授权给第三方应...

    2024-04-01 01:03:20
  • 网络连接失败?提示获取不到服务器的IP地址?教你这么改哈 热门推荐

    网络连接失败?提示获取不到服务器的IP地址?教你这么改哈 热门推荐

    临近下班的时候才调好的网络哎... 后台小哥哥看到同桌发的朋友圈抱怨一天无网,特意跑过来 帮忙修复,但是我的无奈就是不给力,怎么都修复不好,各种可能假设之后(公司网络被监控,IP变更会被拉黑无网,负责人还不在),后台小哥哥把他的有效IP贡献出来给我了,但是但是.....依然无效, 还连累小哥哥也连接不上网络了...很是尴尬呀。于是赶紧掏出手机来问度娘...突然间,...

    2024-04-01 01:03:12
  • 邮箱邮件服务器迁移服务器要多久生效,将设置从电子邮件路由器迁移到服务器端同步...

    邮箱邮件服务器迁移服务器要多久生效,将设置从电子邮件路由器迁移到服务器端同步...

    将设置从电子邮件路由器迁移到服务器端同步10/01/2019本文内容备注如果您已启用仅统一接口模式,则在使用本文中的过程之前,请执行以下操作:选择导航栏上的 设置 ()。选择 高级设置。备注Micro...

    2024-04-01 01:02:46
  • 扑克牌检测Y8S

    扑克牌检测Y8S

    采用YOLOV8训练,得到PT模型,然后直接转ONNX,使用OPENCV的DNN,不需要其他依赖,支持C++/PYTHON

    2024-04-01 01:02:39
  • 规范与避坑指南

    规范与避坑指南

    1. Git 使用避坑指南1)切分支出错master 主分支,即生产版本,xx_test 分支对应测试环境分支,请基于 xx_test 分支拉功能分支开发。比如两个新需求同时开发,项目管理人员此时需基...

    2024-04-01 01:02:33
  • Intellij Idea 使用SVN对指定文件更新到指定版本

    Intellij Idea 使用SVN对指定文件更新到指定版本

    问题在团队项目开发中,我们很容易遇见你SVN提交的文件将人家刚刚修改好的文件给覆盖掉.这是怎么回事了,这多半是因为在你SVN提交之前没有更新所造成的,那么我们该怎么办了?很简单,只需要回滚到之前的版本...

    2024-04-01 01:02:07
  • 频繁跳槽是职场走下坡路的开始,Java程序员注意:跳槽前,你该考虑5个问题

    本文转载自:频繁跳槽是职场走下坡路的开始,Java程序员注意:跳槽前,你该考虑5个问题职场上,跳槽是所有职场人都会遇到的问题。关于职场跳槽的理由,笔者做了以下盘点:和直接领导的矛盾导致离职;逃避问题而离职;工作压力大,挣钱少而离职…总之,大部分职场人并不清楚为什么要跳槽,或者根本就没有考虑那么多,就随意选择离职。以至于职业路途走得一塌糊涂。笔者做过的职业咨询,就遇到过这样的案例:一...

    2024-04-01 01:01:59
  • ubuntu clion 创建桌面快捷方式

    ubuntu clion 创建桌面快捷方式 首先在终端下输入 cd /usr/share/applications/ 进入applications目录下,建立一个clion.desktop文件 sud...

    2024-04-01 01:01:50
  • BZOJ3600:没有人的算术

    传送门如果能给每个 \(pair\) 按照权值编号就好了假设之前已经有了所有的权值的编号,现在考虑编号新的 \(pair\)如果看过了陈立杰的论文的话,不难得到一个重量平衡树的做法给树上每个子树一个实数权值区间 \([l,r]\),这个点权值为 \(mid=\frac{l+r}{2}\)左子树 \([l,mid]\) 右子树 \([mid,r]\)只需要选择一个树高 \(log\) 的...

    2024-04-01 01:01:24
  • java 从excel取数据,如何用JAVA读取EXCEL文件里面的数据(用java处理excle数据)

    java操作poi怎么更改excel中的数据修改要写入,也就是保存一。import java.io.FileInputStream;import java.io.FileNotFoundExcepti...

    2024-04-01 01:01:16