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

2023-11-06

在这里插入图片描述


前言

在学习之前,让我们先了解一下什么是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 安全框架中扮演着重要的角色。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java之路 —— 带你了解安全框架Shiro 的相关文章

随机推荐

  • 数据库学习一站式入门资料(纯干货)

    本文涉及的所有内容仅供学习使用 如有侵权 请联系本人删除 一 数据库管理系统安装 这里提供三种方式安装 1 华为的OpenGauss系统 支持国产 这里提供在华为云服务器上配置的方法 由于是装在云端的 对本地的机器没什么要求 基本可以上浏览
  • 衡器---电压信号与电压

    一 灵敏度 激励与检测分度 灵敏度 LV 激励 JV 总信号电压变化量 LVJL 按照3000分度数 每分度电压为 LVJV 3000 例 灵敏度 2 0mV V 激励 5V 每个检定分度电压是 2 0mV 5V 3000 3 3uv 检测
  • Vue2学习第二十篇:Vue中的插件

    功能是用于增强Vue 就是把一些定义全局的功能都放在里面整合起来 到时候这些功能都能在全局使用 本质上就是包含install方法的一个对象 install的第一个参数就是Vue 第二个以后的参数就是插件使用者传递的参数 使用步骤如下 第一步
  • 几秒前,几分钟前,几小时前,几天前,几月前,几年前的java实现

    在代码开发的时候 特别是那种论坛啊什么的要返回 几秒前 几分钟前 几小时前 几天前 几月前 几年前 这样的时间格式 服务端那边只肯返回yyyy MM dd HH mm ss的格式 没办法 只能客户端加个转换了 代码如下 public cla
  • 目标检测遮挡问题及解决方案汇总

    部分内容来自 目标检测之小目标检测和遮挡问题 AndyJ的学习之旅 CSDN博客 遮挡目标检测 有遮挡的目标检测 Repulsion Loss Detecting Pedestrians in a Crowd CVPR2018 遮挡情况 目
  • Logistic回归——银行违约情况分析

    文章目录 一 Logistic回归原理 1 Sigmoid函数作用 2 用梯度下降法求解参数 二 利用Logistic回归分类 1 数据预处理 2 利用梯度上升计算回归系数 3 训练和验证 总结 一 Logistic回归原理 1 Sigmo
  • Linux命令行解密

    本章节将要讲解的命令 命令 命令 用途 type 显示命令类型 which 显示可执行文件的位置 help 获取Shell内建命令的帮助信息 man 显示命令的手册页 info 显示命令的info条目 alias 创建自己的命令 什么是命令
  • 【maven】No plugin found for prefix ‘install‘ in the current project

    1 场景1 1 1 概述 在安装jar文件到本地仓库时有时会遇到这样的问题 解决方法 下载 wagon http lightweight 2 2 jar 位置 https repo maven apache org maven2 org a
  • Unity设计模式之工厂模式

    一 什么是工厂模式 工厂模式是一种创建型设计模式 它提供了一种封装对象创建的方式 将对象的创建过程与使用过程分离 使得代码更加灵活 可扩展和可维护 在Unity中 工厂模式常用于创建和管理游戏对象 对啦 这里有个游戏开发交流小组里面聚集了一
  • MySQL存储结构

    MySQL体系结构 1 网络接入层 提供了应用程序接入MySQL服务的接口 客户端与服务端建立连接 客户端发送SQL到服务端 2 服务层 管理工具和服务 系统管理和控制工具 例如备份恢复 Mysql复制 集群等 连接池 主要负责连接管理 授
  • 客户合并修改需求 @熊哥

    1 客户信息确认列表 如果是 车主信息确认列表 和 车主信息查询列表 调用的标准客户修改功能 保存客户档案时 不校验客户信息重复规则 2 客户信息确认列表 客户信息确认列表 修改为 车主信息确认列表 客户信息合并 修改为 车主信息合并列表
  • Moviepy时间变换time_mirror再遇‘OSError: MoviePy error: failed to read the first frame of video file‘解决示例代码

    老猿Python博文目录 https blog csdn net LaoYuanPython 一 引言 在 https blog csdn net LaoYuanPython article details 106478711 moviep
  • leetcode63. 不同路径 II

    https leetcode cn com problems unique paths ii 一个机器人位于一个 m x n 网格的左上角 起始点在下图中标记为 Start 机器人每次只能向下或者向右移动一步 机器人试图达到网格的右下角 在
  • 程序运行结构

    C 支持最基本的三种程序运行结构 顺序结构 选择结构 循环结构 顺序结构 程序按顺序执行 不发生跳转 选择结构 依据条件是否满足 有选择的执行相应功能 循环结构 依据条件是否满足 循环多次执行某段代码 选择结构 if语句 作用 执行满足条件
  • Python使用opencv实现图片定位第三种方式

    encoding utf 8 author Jeff xie 这个方法识别度更高 比cv2 matchTemplate更好 cv2 matchTemplate无定位的图片 这个方法可以 import cv2 bgPath D Reg Car
  • 如何清理台式计算机内存,如何清理电脑运行内存_电脑运行内存不足怎么解决-win7之家...

    我们在电脑上会运行很多我们需要使用的程序 这样的话会带着电脑运行内存不足变卡的问题 这就需要清理先电脑没在用的程序了或者清理些内存也可以缓解的 那么如何清理电脑运行内存呢 下面小编给大家分享电脑运行内存不足的解决方法 解决方法 一 关闭性能
  • 如何在Vue模板中绑定事件?

    让我们来谈谈你在Vue模板中绑定事件的问题吧 首先 我们要先了解什么是事件 在Vue中 事件是指在模板中绑定的一些特殊的HTML属性 比如v on click 它们可以让我们在用户与页面交互时执行一些操作 在Vue模板中绑定事件有两种方式
  • Cocos Creator3D:制作可任意拉伸的 UI 图像

    推荐 将 NSDT场景编辑器 加入你的3D工具链 3D工具集 NSDT简石数字孪生 制作可任意拉伸的 UI 图像 UI 系统核心的设计原则是能够自动适应各种不同的设备屏幕尺寸 因此我们在制作 UI 时需要正确设置每个控件元素的尺寸 size
  • 4.three.js详解PBR物理渲染

    1 标准网格材质 import as THREE from three 导入轨道控制器 import OrbitControls from three examples jsm controls OrbitControls 导入动画库 im
  • java之路 —— 带你了解安全框架Shiro

    文章目录 前言 一 组件 二 主要开发步骤 三 常用的API 四 认证的流程 前言 在学习之前 让我们先了解一下什么是shiro Shiro Apache Shiro 是一个Java安全框架 提供了身份认证 授权 加密和会话管理等功能 它的