Shior权限

一、概述

1、什么是权限管理?

答: 实现对用户访问系统的控制,用户只能访问自己被授权的资源。只要有用户名和密码的系统,权限管理都会出现。
举个例子: 答:给张三赋予 “人力资源经理”角色,该角色就具有“查询员工”,“添加员工”,“修改员工”,“删除员工”的权限。此时张三进入系统后,就有这些操作权限。

2 、shiro概述
  • Apache Shiro是Java的一个安全框架
  • 强大、小、简单易用,主要用来:便捷的认证、授权、加密、会话管理、与WEB集成、缓存等
  • Spring中的Spring Security也是一个权限框架,但是它和Spring的依赖过于紧密,是个重量级框架,没有Shior使用简单。
  • 而Shior不依赖于Spring,不仅可以用于 web,还可以用于C/S系统,分布式系统权限管理。
2 、shiro整体架构/架构流程
  • 整体架构:
    • ①用户(Subject)发送请求到安全管理器(Security Manager)
    • ②安全管理器调用认证器组件(Authenticator)进行认证
    • ③认证需要的比对数据(token与数据库中的数据)通过Realm来获取。

在这里插入图片描述在这里插入图片描述

二、Shior核心概念

1、核心类
  • Authentication:身份认证/登陆,验证用户是不是拥有相应的身份(角色)。(判断用户名密码是否匹配的登陆过程)
  • Authorization:授权,即:权限认证,验证某个已认证的用户是否拥有某个权限。
  • Session Manager:会话管理。用户登陆后就是建立了一次会话,在退出之前,所有的信息都在会话当中。
2、主要概念
  • Subject:代表正在操作系统的客户
  • SecurityManager:安全管理器,相当于SpringMVC中的DispatcherServlet。校验用户是否合法。
  • Realms:提供从数据库取出来的用户名 和 密码。
  • token: 中保存了用户输入的账号和密码。
    ###### 3、

三、Shiro的使用(认证 和 授权)

0、创建Maven项目(quick start)
1、Shiro需要的jar包
<dependency>《!--Shiro jar--》
  <groupId>org.apache.shiro</groupId>
  <artifactId>shiro-core</artifactId>
  <version>1.4.0</version>
</dependency>

<dependency>《!--引入日志jar--》
  <groupId>commons-logging</groupId>
  <artifactId>commons-logging</artifactId>
  <version>1.2</version>
</dependency>

<dependency><!--日志依赖的jar : slf4j-nop-->
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-nop</artifactId>
  <version>1.7.25</version>
  <scope>test</scope>
</dependency>

在这里插入图片描述

2、Shiro认证流程代码分析

在这里插入图片描述

3、Shiro认证流程:(匹配账号密码来进行登陆验证)
  • 1、构造一个SecurityManager环境。
  • 2、主体(用户)提交认证subject.login(token)给安全管理器(SecurityManager) 。。。。。 //subject.login(token)的方法内部会把token提交给安全管理器去做认证(即:调用securityManager.login(token))。
  • 3、安全管理器 调用认证器组件(Authenticator)执行真正的认证

认证的流程

认证的流程: 用户发送认证请求到安全管理器,安全管理器调用认证器组件进行认证。
如何认证? 安全管理器在调用 认证器组件认证之前,要调用realm进行数据库查询 判断是否有该用户。没有的话,直接返回认证信息info为null,就不再调用认证器组件了。若该用户存在的话,则再调用认证器组件进行认证。

匹配原则?

  • 先匹配账号是否存在,若账号不存在返回info==null;若账号存在(即:info != null),再交给一个认证器接着再验证密码是否匹配。

认证流程图

在这里插入图片描述在这里插入图片描述

4、自定义Realm(在Realm中做登陆的认证)

当用户真实的账号密码没有保存在.ini文件中,而是要从数据库中进行读取获得时,我们就需要自定义Realm来进行认证的验证。
在这里插入图片描述在这里插入图片描述

5、散列密码
  • 1)概述:一般用于对数据加密,加密结果为:一串长字符。是一种不可逆的算法。一般适用于存储密码之类的数据,常见的散列算法如:MD5、SHA等。
    • 不可逆:(明文转换成密文之后,就没有办法再转成明文了)
    • 很多的MD5解密网站,实质就是 根据你输入的密文 去数据库查询 对应的明文。
    • 同一个字符串,每次加密的结果是一样的。
    • 数据库中存的是加密后的密文。用户输入的密码,系统会进行加密后再与数据库中密文比较。
    • 为了加密的数据 更加的安全,我们需要“加盐” + “多次散列”。在这里插入图片描述
  • 2)为了实现用户让输入的明文密码自动的(按照我的加密规则)进行MD5加密,加密后与数据库的密文进行比对。我们要做一些配置才能达到这样的目的。
  • 在这里插入图片描述在这里插入图片描述
6、授权
  • 0)权限格式的定义:

资源:权限,资源:权限
user:create,user:update

  • 1)方式一:用户的权限信息写在了**.ini文件中**(实际开发是写在数据库中的)
    .ini配置文件
    -
    具体的操作:
    在这里插入图片描述
  • 2)方式二:在自定义realm中操作
  • 在这里插入图片描述在这里插入图片描述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值