shiro学习1-权限管理和Shiro介绍

本博客 Shiro系别 的学习,是根据 《跟我学Shiro》一书和 叩丁狼Shiro视频教学 写下来的笔记

1. 什么是权限管理

实现用户访问系统的控制,按照安全规则或者安全策略限制用户操作,只允许用户访问被授权的资源。

权限管理包括用户身份认证和授权两部分。简称认证授权。

1.1 身份认证:

​ 判断用户是否为合法用户的处理过程,最常用的身份认证就是通过用户名和口令,看其是否与系统中存储的用户。

身份认证中主要的关键对象:

  1. Subject: 主体(user对象)
    访问系统的用户,主体可以是用户或程序等,进行认证的都成为主体。
  2. Principal:身份信息(username)
    是主体(subject)进行身份认证的标识,标识必须具有唯一性,如用户名、手机号、邮箱地址等。一个主体可以有多个身份,但是必须要有一个主身份(Primary Principal)。
  3. credential: 凭证信息(password)
    是只有主体自己知道的安全信息,如密码、安全吗等。

1.2 授权

​ 即访问控制,控制谁能访问那些资源。主体进行身份认证后需要分配权限方可访问熊的资源,对于某系资源没有权限是无法得到范文的

2. Apache Shiro

shiro 是 java 的一个安全框架,可以帮助我们完成: 认证、授权、加密、回话管理、于web 集成、缓存等。

2.1 shiro 结构体系

在这里插入图片描述

Authentication[ɔː,θentɪ’keɪʃən]:身份认证/登录
验证用户是不是拥有相应的身份。

Authorization[ɔːθəraɪ’zeɪʃ(ə)n]: 授权,即权限验证。
验证某个已认证的用户是否拥有某个权限,即判断用户是否能做的事情。验证用户对某个资源是否具有某个权限。

Session Management: 会话管理
用户登录后就是一次回话,在没退出之前,它的所有信息都在回话中,会话可以是普通的javaSE,也可以是Web环境。

Cryptography[krɪp’tɒgrəfɪ]: 加密,保护数据的安全性。
提供了常见的一些加密算法,使得在应用中可以很方便的实现数据安全。并且使用很便捷。

Web Support: web 应用程序支持。
shiro 可以很方便的集成到 web 应用程序中。

Caching: 缓存
shiro 提供了对缓存的支持。支持多种缓存架构,如:encache、缓存数据库redis。用户缓存永固登录后,其用户信息、拥有的角色、权限不必每次去查,提高效率。

Concurrency: 并发支持
支持多线程并发访问,shiro 支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去

Testing:测试,通过测试支持

Run As:
支持一个用户在允许的前提下使用另一个身份登录。

Remember Me:记住我。即登录一次后,下次再来就不用登录了。

Shiro架构的三个主要概念(Subject、SecuitManager、Reamls)

  1. Subject 访问系统的用户,主体可以是用户、程序等,进行认证额都成为主体。
    subject 其基本意思是"当前的操作用户",他是一个抽象的概念,可以是人,也可以是其他第三方进场或事物,如爬虫,机器人等;即一个抽象概念;所有 Subject 都绑定 到 SecurityManager,与 Subject 的所有交互都会委托给 SecurityManager;可以把 Subject 认 为是一个门面;SecurityManager 才是实际的执行者;(这里用到了门面模式,简单讲就是 Subject 内容有个私有的SecurityManager ,Subject通过调用 SecurityManager 的方法实现功能 )
    在程序的任意位置:Subject currentUser = SecurrityUtils.getSubject() 获取 shiro
    一旦获得 Subject,你就可以立即获取你希望用 Shiro 为当前用户做的 90% 的事情。 如登录、登出、访问会话、执行授权检查等。
  2. SecurrityManager 安全管理器,即所有与安全有关的操作都会与 SecurityManager 交互;且它管理着所有 Subject;可以看出它是 Shiro 的核心,它负责与后边介绍的其他组(认证器/授权器/缓存器控制器)进行交互,实现 subject 委托的各种功能。有点类似于 springmvc 中的DispatcherServlet 前端控制器
  3. Reamlm 域,Shiro 从 Realm 获取安全数据(如用户、角色、权限),就是说 SecurityManager 要验证用户身份,那么它需要从 Realm 获取相应的用户进行比较以确定用户身份是否合法;也需要从 Realm 得到用户相应的角色/权限进行验证用户是否能进行操作;可以把 Realm 看 成 DataSource,即安全数据源。

也就是说对于我们而言,最简单的一个 Shiro 应用:

1、 应用代码通过 Subject 来进行认证和授权,而 Subject 又委托给 SecurityManager;

2、 我们需要给 Shiro 的 SecurityManager 注入 Realm,从而让 SecurityManager 能得到合法的用户及其权限进行判断。

从以上也可以看出,Shiro不提供维护用户/权限,而是通过 Realm让开发人员自己注入。

三者简单关系图:
在这里插入图片描述

2.2 shiro的系统体系

接下来我们来从 Shiro 内部来看下 Shiro 的架构,如下图所示:

在这里插入图片描述
Subject: 主体,可以看到主题可以是任何与应用交互的用户。

SecutityManager: 相当于 springmvc 中的 DispatcherServlet 或者 Struts2 中的 FilterDispatcher。是 Shiro 的心脏,所有具体的交互都通过 SecutityManager 进行控制,它管理者所有 Subject,且负责进行认证和授权、及会话、缓存的管理。

Authentication: 认证器,负责主体认证的,这是一个扩展点,如果用户觉得 Shiro 默认的不好,可以自定义实现,器需要认证策略(Authentication Strategy),即什么情况下算用户认证通过。
Authorizer: 授权器,或者访问控制器,用来决定主题是否有权限进行相应的操作:即控制者用户能访问应用中的那些功能。

Realm: 可以有一个或多个 Realm,可以认为是安全实体数据源,即用于获取安全实体的,可以是 JDBC 实现, 也可以是 LDAP 实现,或者内存实现等等;由用户提供。注意:Shiro 不知道你的用户/权限存储再哪及以何种格式存储,所以我们一般再应用中都需要实现自己的Realm。

SessionManager: 如果写过 Servlet 就应该知道 Session 的概率,Session 需要有人取管理它的生命周期,这个组件就是 Session Manager;而 Shiro 并不仅仅可以用在 Web 环境中,也可以用在普通的 JavaSE 环境,EJB 等环境,所以呢, Shiro 就是抽象一个自己的 Session 来管理主体与应用之间交互的数据,可以实现分布式和会话管理。

SessionDAO: 数据访问对象,用于会话的 CRUD,比如我们想把 Session 保存到数据库,那么可以实现自己的 SessionDAO,通过 JDBC 写道数据库,比如想把 Session 放到 redis 中,可以实现自己的 redis SessionDAO,另外 SessionDAO中,可以使用 Cache 进行缓存,提高性能。

CacheManager: 缓存控制器,用来管理用户、角色、权限、等,以后你为这些数据基本上很少取改变,放到缓存中可以提高访问的型嫩性能。

Cryptography:密码模块,Shiro 提高了一些厂家的加密组件,哟关于如密码加密和解密。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值