狂神说springboot笔记_狂神说shiro学习笔记+补充包括持久化概念(理论篇)

1.Shiro简介

什么是权限管理?

权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源。权限管理包括身份认证授权两部分。对于需要访问控制的资源用户首先经过身份认证,认证通过后用户具有该资源的访问权限才可访问。

什么是Shiro?

Shiro是一个Java的安全(权限)框架,相对简单,对比Spring Security,没有Spring Security的功能强大。但是实际工作中可能不需要那么复杂 的东西,所以使用小而简单的Shiro就够了。其不仅适用于JavaSE环境,也适用于JavaEE环境。Shiro可以完成认证,授权,加密,会话管理,web集成,缓存等。

三大核心组件

Shiro有三大核心组件,即Subject、SecurityManager和Realm

Subject: 为认证主体。应用代码直接交互的对象是Subject,Subject代表了当前的用户。包含Principals和Credentials两个信息。

Pricipals:代表身份。可以是用户名、邮件、手机号码等等,用来标识一个登陆主题的身份。
Credentials:代表凭证。常见的有密码、数字证书等等。

也就是说两者代表了认证的内容,最常见就是用户名密码了。用Shiro进行身份认证,其中就包括主体认证。

SecurityManager:为安全管理员。是Shiro架构的核心。与Subject的所有交互都会委托给SecurityManager, Subject相当于是一个门面,而SecurityManager才是真正的执行者。它负责与Shiro 的其他组件进行交互。

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

Shrio内部架构

  • Subject: 主体,主体可以是任何可以与应用交互的“用户”
  • SecurityManager: 是Shiro的核心,所有具体的交互都需通过SecurityManager进行,它管理所有的Subject,且负责进行认证授权,会话,及缓存的管理。
  • Authenticator:负责主体认证。当用户尝试登录时,该逻辑被Authenticatior执行。Authenticator知道如何与一个或多个Realm协调来存储相关的用户。从Realm中获得的数据被用来验证用户的身份来保证用户确实是他们所说的他们是谁。
  • Autentication Strategy:如果不止一个Realm被配置,其会协调这些Realm来决定身份认证尝试成功或失败下的条件(比如,如果一个Realm成功,而其他的失败,是否该尝试成功?)
  • Authorizer:负责在应用程序中决定用户的访问控制。它是一种最终判定用户是否被允许做某事的机制。与Authenticator相似,Authorizer也知道如何协调多个后台数据源来访问角色恶化权限信息。Authorizer使用该信息来准确度的决定用户是否被允许执行给定的动作。
  • SessionManager:知道如何去创建及管理用户Session生命周期来为所有环境下的用户提供一个强健的session体验。
  • SessionDAO:代表SessionManager执行Session持久化操作。允许数据存储被插入到会员管理的基础之中。
  • CacheManager:创建并管理其他Shiro组件使用的Cache实例声明周期。因为Shiro能访问许多后台数据源,由于身份验证、授权和会话管理,缓存在框架中一直是一流 的架构功能,用来在通过还是使用这些数据源时提高性能。
  • Cryptograhy:是对企业安全框架的一个自然的补充。密码模块,shrio提高了一些常见的加密组件用于密码加密,解密等。

另外,增加一个概念:持久化

持久化是将程序数据在持久状态和舒适状态间转换的机制。也就是说将瞬时数据(比如内存中的数据,是不能永久保存的)持久化为持久数据(比如持久化在数据库中,能够长久保存)。JDBC和文件IO都是持久化机制。 -------摘自360百科

这个解释也不错

狭义的理解:“持久化”仅仅把域对象永久保存到数据库中;广义的理解,“持久化”包括和数据库库相关的各种操作。包括保存、更新、删除、加载、查询。

持久化的意义在于持久化技术封装了数据访问细节,为大部分业务逻辑提供面向对象的API.通过持久化技术可以减少访问数据库数据次数,增加应用程序执行速度。代码重用性高,鞥能够完成大部分数据库操作。松散耦合,使持久胡阿不依赖与底层数据和上层业务逻辑实现,更换数据库时只需修改配置文件而不用修改代码。(节选自什么是数据持久化?_lee576的专栏-CSDN博客)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值