Shiro快速入门:简介与架构原理

Apache Shiro是一个简洁的Java安全框架,提供认证、授权、加密和会话管理功能,简化了企业级应用的安全实现。Shiro基于RBAC(Role-Based Access Control)模型,将权限与角色关联,简化权限管理。在Shiro中,Subject代表用户,SecurityManager是核心容器,包含认证器、授权器、SessionManager和缓存管理等组件。 Realm则用于连接实际的数据源,处理身份验证和授权。通过自定义Realm,开发者可以按需定制权限控制逻辑。Shiro适用于各种项目,包括JavaSE和Web应用,降低了权限控制的复杂性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Shiro理论知识

一、RABC回顾

RBAC是一个基于角色的访问控制,其实就是一种数据库的设计思想

概念介绍

  • 基于角色的权限访问控制(Role-Based Access Control)作为传统访问控制(自主访问、强制访问)的有前景的代替收到广泛的关注
  • 在RBAC中,权限与角色关联,用户通过成为适当角色的成员而得到这些角色的权限,这就极大的简化了权限的管理
  • RBAC:一种数据库设计思想,根据数据库设计方案,完成项目的权限控制
  • 权限:具备操作事物的能力
  • 角色:一系列权限的集合

二、Shiro简介

上面提到RBAC是一种数据库的设计思想,那么具体的实现还是需要开发者自己完成,那么反复的多表查询和相关的权限角色逻辑代码编写是相当头疼的一件事,所以就有了Shiro框架

官方解释

Apache Shiro 是一个强大的并且简答医用的java权限框架,主要应用有:

  • 认证:Authentication,也就是登录
  • 授权:Authorization,也就是校验认证用户是否具备某个权限或角色
  • 加密:cryptography,对用户的密码进行加密
  • Session管理:Session Manager

Shiro具有简单易懂的API,使用Shiro可以快速并且简单的应用到任何应用中,无论是从最小的移动app到最大的企业级web应用都可以使用.

使用RBAC(思想)的时候,权限操作相关的代码都得我们自己写。使用Shiro(框架)后,Shiro已经帮我们写好了一些相关的API。我们直接调用使用即可。

核心功能

Shiro的几大核心功能:

  • Authentication 认证。如用户的登录。
  • Authorization 授权。用户是否有权限访问指定URL等。
  • Cryptography 密码学。如密码的加密。
  • Session Management。 Session 管理。
  • Web Integration。 Web集成。Shiro不依赖于容器。

三、Shiro架构原理

架构图

在这里插入图片描述

架构说明

最上方我们能看到Shiro适合多种语言以及各种类型的项目

Subject

主体,每个用户登录成功后都会对应一个Subject对象,所有用户信息都存放在Subject中。可以理解:Subject就是Shiro提供的用户实体类

(说明:这里登录成功后没有将信息放入session中,是因为如果是javaSE项目的开发,就没有session这个概念,怎么放,但是Shiro也是可以用在JavaSE项目的,所以Shiro自己有Subject对象的话能使它更强大!)

Security Manager

Shiro最大的容器(类似于Spring容器),此容器中包含了Shiro的绝大多数功能。在非Spring Boot项目中,获取Security Manager 是编写代码的第一步。而在Spring Boot中已经帮助我们自动化配置了

Authentication

认证器,执行认证过程调用的组件,里面包含了认证策略(用来校验用户登录的)

Authorizer

授权器,执行授权时调用的组件(登录成功后判断用户拥有的权限和角色)

Session Manager

Shiro被Web集成后,HttpSession对象会由Shiro的Session Manager来管理

Cache Manager

缓存管理,Shiro执行很多第三方缓存技术。例如:EHCache等。(它就是将一些常用的数据信息放到缓存中,避免频繁的访问数据库,比如用户具备的权限)

Session DAO

操作Session内容的组件,(负责对Session中的信息进行增删改操作)

Realms

Shiro框架实现权限控制不依赖于数据库,通过内置数据也可以实现权限控制。但是目前绝大多数应用的数据都存储在数据库中,所以Shiro提供了Realms组件,此组件的作用就是访问数据库。Shiro内置了访问数据库的代码,通过简单配置就可以访问数据库,也可以自定义Realms实现访问数据库逻辑(绝大多数都这么做)

总结

认证

当用户输入登录信息点击登录后,我们通过自定义的Realm将登录信息封装好交给Shiro,它会通过认证器然后将用户输入信息和数据库中的信息进行比对,然后通过是否有异常抛出的方式来告知用户是否登录成功或失败

在这里插入图片描述

授权

当用户登录成功后要访问某些资源或页面时,Shiro会通过授权器,从数据库中查询用户拥有的角色或权限,然后决定该用户是否有权限访问某个资源

在这里插入图片描述

加密

为了保证用户信息的安全,一般数据库中的敏感信息如密码都是加密后才存入的,Shiro也提供了很多的加密算法,如Base64、MD5等,开发者制定好加密方式告知Shiro,然后当用户输入密码后,Shiro会自动的先对密码加密在与数据库中对比

自定义Realm

上面提到我们需要对用户输入的密码进行加密,但是Shiro框架默认是不会自动加密的,这也就导致它提供的几个Realm中的内部实现代码是不能完成我们想要的效果的,所以我们需要自定义Realm来对它的执行进行干预,让它按照我们指定的规则来执行即可,

在这里插入图片描述

Pluggable Realm可以理解为就像插头一样,数据库是插座,你是用哪种方式的Realm就将这个Realm插到数据库这个插座上,然后Shiro就能按照你选择的方式对数据库自动查询了!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值