java之路 —— 带你了解安全框架Shiro

news2024/11/17 12:35:26

在这里插入图片描述

文章目录

  • 前言
  • 一、组件
  • 二、主要开发步骤
  • 三、常用的API
  • 四、认证的流程


前言

在学习之前,让我们先了解一下什么是shiro。

Shiro(Apache Shiro)是一个Java安全框架,提供了身份认证、授权、加密和会话管理等功能。它的设计目标是简单、易用和灵活。

主要是有以下是Shiro框架的主要特点:

1. 身份认证: Shiro提供了多种身份认证方式,包括基于表单、HTTP基本认证、LDAP和OAuth等。开发人员可以根据应用程序需求选择适合的认证方式。

2. 授权管理: 通过Shiro的授权机制,开发人员可以定义用户角色和权限,并通过编程方式或配置文件来限制用户对资源的访问。Shiro支持基于角色和权限的细粒度授权管理。

3. 会话管理: Shiro可以管理用户会话,包括会话的创建、维护和失效处理。它支持不同的会话存储方式,如内存、数据库或自定义存储方式。

4. 密码加密: Shiro提供了密码加密的功能,可以帮助开发人员将用户密码进行加密存储,增加系统的安全性。

5. 可插拔架构: Shiro采用可插拔的设计,开发人员可以根据需要自定义和扩展各个组件,以满足具体业务需求。

6. 简化开发: Shiro的设计理念是简单明确,它提供了简洁的API和易于理解的概念模型,使得开发人员能够快速上手并集成到项目中。

总体而言,Shiro是一个轻量级的安全框架,适用于各种Java应用程序,无论是传统的JavaEE应用还是现代化的Web应用或微服务架构。它提供了身份认证、授权、加密和会话管理等核心功能,同时支持自定义扩展,以满足不同场景下的安全需求。

一、组件

Subject: 主体,可以看到主体可以是任何可以与应用交互的“用户”;

SecurityManager: Shiro的心脏;所有具体的交互都通过SecurityManager进行控制;负责所有Subject、且负责进行认证和授权、及会话、缓存的管理。

Authenticator: 认证器,判断用户是否正常登陆
Authorizer: 授权器,判断用户是否有权限操作资源
Realm: 可以有1个或多个Realm,主要提供认证和授权的数据;

Session: Shiro提供一个权限的企业级Session解决方案,session的生命周期都SessionManager中进行管理。

SessionManager: shiro的会话管理器;

SessionDAO: 用于会话的CRUD,比如存储到ehcache或者redis中的会话增删改查;

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

Cryptography: 密码模块,Shiro提高了一些常见的加密组件用于如密码加密/解密的。

二、主要开发步骤

使用Shiro开发一个基本的身份认证和授权功能,可以按照以下主要步骤进行:

1. 引入依赖: 在项目中引入Shiro框架的相关依赖,可以通过Maven或Gradle进行管理。

2. 配置Shiro: 创建Shiro的配置文件(通常是一个ini或Properties文件),配置Shiro的各个组件和属性,例如Realm、Session管理器、加密算法等。

3. 实现自定义Realm: 根据实际需求,实现自定义的Realm类。Realm负责从数据源(如数据库)中获取用户信息和权限信息,并对其进行验证和授权。

4. 编写身份认证代码: 在应用程序中编写身份认证的代码,通过Shiro提供的API调用对用户输入的凭据(如用户名和密码)进行认证,并获取用户相关的信息。

5. 编写授权代码: 根据需要编写授权相关的代码。可以定义角色和权限,并使用Shiro提供的API检查用户是否具有特定的角色或权限。

6. 在应用程序中集成Shiro: 根据框架和应用类型的不同,将Shiro集成到应用程序中。这可能涉及到配置过滤器链(Web应用)、添加AOP切面(Spring应用)或其他集成方式。

7. 测试和调试: 运行应用程序,并进行测试和调试以确保身份认证和授权功能正常工作。

8. 高级功能和定制化: 根据具体需求,探索Shiro的更高级功能和自定义扩展点。这可能涉及到基于注解的权限控制、密码加密、多Realm支持等。

三、常用的API

#获取当前用户
Subject currentUser = SecurityUtils.getSubject(); 
#判断用户已经认证
currentUser.isAuthenticated() 
#用户登录凭证
UsernamePasswordToken token = new UsernamePasswordToken("lonestarr", "vespa"); 
#记住我
token.setRememberMe(true); 
#登陆校验
currentUser.login(token); 
#判断是否有角色权限
currentUser.hasRole("schwartz") 
#判断是否有资源操作权限
currentUser.isPermitted("lightsaber:wield") 
#登出
currentUser.logout();

其中有主要的:
1.认证

UsernamePasswordToken token = new UsernamePasswordToken("lonestarr", "vespa");
currentUser.login(token);
currentUser.logout();

2.判断权限

currentUser.hasRole("schwartz")
currentUser.isPermitted("winnebago:drive:eagle5")

四、认证的流程

Shiro 是一个用于身份验证、授权、加密和会话管理的框架。相比其他安全框架,Shiro 简单易用,非常适合中小型项目,下面是 Shiro 的认证流程:

1. 构建 SecurityManager 对象: Shiro 的所有安全操作都基于 SecurityManager 进行,因此首先要创建一个 SecurityManager 对象。

2. 构建 AuthenticationToken 对象:身份验证的第一步是获取用户提交的身份凭证(AuthenticationToken)。凭证通常包含用户名和密码。

3. 身份验证:SecurityManager 获得凭证后,将其传递给 Authenticator 对象进行身份验证。Authenticator 对象将尝试使用这些凭证来验证用户的身份。

4. 构建 Subject 对象:如果身份验证成功,将使用 Subject 对象表示已经身份验证的用户,Subject 包含用户的身份信息以及与该用户相关的授权信息。

5. 授权:一旦用户被身份验证并已经创建了 Subject 对象,就可以使用 Subject 进行授权操作。授权通常包含用户角色和访问权限。

总的来说,Shiro 的身份验证流程非常简单,只需要通过 SecurityManager 对象、身份凭证、Authenticator 对象、Subject 对象和授权即可完成。内容可能比较简单,但是 Shiro 在整个 Java 安全框架中扮演着重要的角色。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/689529.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VMware workstation 17 pro 安装 Windows 10 操作系统

① 访问官方网址下载 MediaCreationTool22H2.exe ② 下载 Windows 10 iso 镜像 ③

Android13 安装最新版 Frida

本文所有教程及源码、软件仅为技术研究。不涉及计算机信息系统功能的删除、修改、增加、干扰,更不会影响计算机信息系统的正常运行。不得将代码用于非法用途,如侵立删! Android13 安装最新版 Frida 环境 win10Pixel4Android13Python3.9Frida1…

真箱独立版盲盒小程序定制开发

真箱独立版盲盒小程序定制开发需要以下步骤: 需求分析:确定客户具体的需求和功能要求,例如支持哪些盲盒商品种类、购物车、支付方式等。 用户界面设计:根据客户要求,设计合适的用户界面,包括首页、…

创建四大经济区shp矢量图

准备 1、具有省域划分的shp矢量图 2、Arcgis 一、创建新要素 右击目录-新建-要素文件 选择要素开始编辑 矩形框选需要的行政边界要素点—右击要素线复制—粘贴至新要素文件中 (长按shift键,多点选择) 结果图(部分&#xff0…

chatgpt赋能python:Python计算结果:快速、高效的数据分析的秘密武器

Python计算结果:快速、高效的数据分析的秘密武器 Python是一个高级的、互动式的、以面向对象语言为基础的动态语言,广泛应用于各种领域的编程任务中,特别是在数据分析的领域中扮演着重要的角色。Python计算结果快速、高效、并且容易学习&…

LENOVO联想笔记本电脑ThinkBook 15 G5 ABP(21JF)原装Win11系统,原厂OEM预装系统镜像

lenovo联想笔记本电脑,ThinkBook 15 G5 ABP(21JF)原厂Windows11系统原装专用系统,恢复出厂状态一模一样 系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件、联想电脑管家等预装程序 所需要工具:16G或以上的U盘 文件格式:IS…

c语言通讯录——动态版本(带详细文字解释)

1.定义一个用于存储一个人的信息的结构体 typedef struct PeoInfo {char name[NAME_MAX];int age;char sex[SEX_MAX];char addr[ADDR_MAX];char tele[TELE_MAX]; }PeoInfo;定义了一个名为 “PeoInfo” 的结构体(struct)类型,用于存储有关一个…

软件测试实验室申请cnas需要做好哪些资源准备?

软件测试实验室在准备申请cnas资质前,除了建立完善的软件测试体系、科学的质量管理体系,还需要做好相关资源的准备。本文我们就一起来看一下,cnas官方文件中的资源要求部分,以及对于软件检测实验室,应该做好哪些准备才…

项目bug--汇集

1、 2、 原因:页面选择后 没有调init方法 刷新页面 解决:在保存方法最后 ,加上init方法 3、 原因:select中 v-model绑定的id、select选项中 :value 绑定的id ,和编辑时触发的方法里 的id 没有一致,可能的…

抖音账号矩阵系统源码开发怎么用

以下是一些关键的技术交付形式: 1. 形成完整的运营需求框架 在开展任何项目前,首先应建立一个完整的运营需求框架。这个框架要对于整个系统的功能、结构、性能、安全、稳定性等方面进行详细的需求分析。并且需要与各方沟通,形成清晰的需求文…

【高频电子线路课程设计】调幅发射机

目录 高频电子线路课程设计 摘要: 1绪论 1.1设计的作用和目的 2调幅发射机的主要性能指标 2.1调幅发射机的工作原理 3小功率调幅发射机的设计 3.1方案的选择 3.1.1简易调幅发射机的工作原理框图 3.1.2功率分配及电源电压确定 3.1.3各级晶体管的选择 3.2…

Golang每日一练(leetDay0109) 拼接最大数、区间和的个数

目录 321. 拼接最大数 Create Maximum Number 🌟🌟🌟 327. 区间和的个数 Count of Range Sum 🌟🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Pytho…

【Android】怎么把一个自定义Dialog弄成一个圆形的

需求 自定义一个Dialog&#xff0c;做成圆形 实现 实现步骤&#xff1a; 创建XML布局 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://s…

多元分类预测 | Matlab麻雀算法(SSA)优化极限学习机(ELM)的分类预测,多特征输入模型。SSA-ELM分类预测模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 麻雀算法(SSA)优化极限学习机(ELM)的分类预测,多特征输入模型。SSA-ELM分类预测模型 多特征输入单输出的二分类及多分类模型。程序内注释详细,直接替换数据就可以用。程序语言为matlab,程序可出分类效果图,迭代…

C#中如何调整easyui中控件方法$.messager.alert弹窗窗口和字体的大小

首先看下调整前的效果&#xff1a; 这是easyui 默认的一个效果&#xff0c;然后 我在网上搜调整大小&#xff0c;搜到的代码是这样的 $.messager.alert({title: 提示,msg: ,icon: warning,ok: 确定,style: {fontSize: 20px // 修改字体大小},fn: function(){$(.messager-windo…

Git 常用指令

查看修改的文件 将修改的文件添加到版本库 Git如何创建、切换、删除分支? 合并分支 新建分支 切换分支 合并分支&#xff0c;解决冲突 删除分支

如何校验 MySQLOracle 时间字段合规性?

作者&#xff1a;余振兴 爱可生 DBA 团队成员&#xff0c;热衷技术分享、编写技术文档。 本文来源&#xff1a;原创投稿 爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。 背景信息 在数据迁移或者数据库低版本升级到高版本…

基于OneAPI工具分析包TensorFlow的聊天机器人设计分析和总结

文章目录 基础介绍&#xff1a;实现思路&#xff1a;详细介绍1. 聊天机器人发展历程&#xff1a;2. embedding_attention_seq2seq接口&#xff1a;3. 训练模型&#xff1a;4. Python编程实现完整的聊天机器人&#xff1a;补充内容&#xff1a; 环境搭建与关键技术环境搭建关键技…

【跟晓月学数据库】基于book库的mysql进阶实战

前言 上篇文章中&#xff0c;我们已经导入了book库&#xff0c;如果你还没有导入book库&#xff0c;参考&#xff1a;【跟晓月学数据库】使用MySQLdump 对数据导入导出 这篇文章&#xff0c;主要是基于book库的操作&#xff0c;希望对你有用。 &#x1f3e0;个人主页&#xf…

如何在vue项目开发中使用tailwindcss样式

在vue项目中下载tailwindcss依赖 yarn add tailwindcss1.4.6ornpm i tailwindcss1.4.6新建一个tailwind.css文件 在src文件夹下的asset静态资源文件夹中创建一个css样式文件夹&#xff0c;然后在该css文件夹下创建一个tailwind.css文件&#xff0c;并在文件中写入如下代码 使用…