Apache Shiro教程(2)

news2024/9/28 15:05:43

Shiro实战教程

1、权限的管理

  • 1.1、什么是权限管理

1、基本上涉及到用户参与的系统都需要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源
2、权限管理包括用户身份认证授权两部分,简称 认证授权.对于需要访问控制的资源用户首先经过身份认证,认证通过后用户具有该资源的访问权限方可访问

  • 1.2、什么是身份认证

身份认证就是判断一个用户是否为合法用户的处理过程。最常用的简单身份认证方式是系统通过核对用户输入的用户名和口令,看其是否与系统存储的该用户的用户名和口令一致,来判断用户身份是否正确。对于采用指纹等系统。则需出示指纹。对于硬件key等刷卡系统,则需要刷卡。

  • 1.3、什么是授权

授权,即访问控制,控制谁能访问哪些资源。主体进行身份认证后需要分配权限方可访问系统的资源,对于某些资源没有权限的则无法进行访问。

2、什么是shrio?

Apache Shiro™ is a powerful and easy-to-use Java security framework that performs authentication, authorization, cryptography, and session management. With Shiro’s easy-to-understand API, you can quickly and easily secure any application – from the smallest mobile applications to the largest web and enterprise applications.

Shiro是apache旗下的一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权、加密、会话管理等功能,组成了一个通用的安全认证框架

3、shiro的核心架构

shiro_structor.png

subject( org.apache.shiro.subject.Subject) 当前与软件交互的实体(用户、第 3 方服务、cron 作业等)的特定于安全性的“视图”。

SecurityManager ( org.apache.shiro.mgt.SecurityManager ) 如上所述,它SecurityManager是 Shiro 架构的核心。它主要是一个“伞形”对象,用于协调其托管组件以确保它们顺利协同工作。它还管理 Shiro 对每个应用程序用户的视图,因此它知道如何为每个用户执行安全操作。

Authenticator ( org.apache.shiro.authc.Authenticator ) 该Authenticator组件负责执行和响应用户的身份验证(登录)尝试。当用户尝试登录时,该逻辑由Authenticator. Authenticator知道如何与Realms存储相关用户/帐户信息的一个或多个进行协调。从中获得的数据Realms用于验证用户的身份,以确保用户确实是他们所说的人。

身份验证策略( org.apache.shiro.authc.pam.AuthenticationStrategy ) 如果Realm配置了多个,AuthenticationStrategy则将协调领域以确定身份验证尝试成功或失败的条件(例如,如果一个领域成功但其他领域失败,尝试成功了吗?必须所有领域都成功吗?只有第一个?)。

Authorizer ( org.apache.shiro.authz.Authorizer )Authorizer是负责确定用户在应用程序中的访问控制的组件。它是最终决定用户是否被允许做某事的机制。与 一样Authenticator,Authorizer也知道如何与多个后端数据源协调访问角色和权限信息。使用Authorizer此信息来准确确定是否允许用户执行给定的操作。

SessionManager ( org.apache.shiro.session.mgt.SessionManager )SessionManager知道如何创建和管理用户Session生命周期,为所有环境中的用户提供强大的会话体验。这是安全框架领域的一项独特功能——Shiro 能够在任何环境中本地管理用户会话,即使没有可用的 Web/Servlet 或 EJB 容器也是如此。默认情况下,Shiro 将使用现有的会话机制(例如 Servlet Container),但如果没有,例如在独立应用程序或非 Web 环境中,它将使用其内置的企业会话管理来提供相同的编程体验。存在以允许使用SessionDAO任何数据源来持久化会话。

SessionDAO ( org.apache.shiro.session.mgt.eis.SessionDAO )代表. SessionDAO_ 这允许将任何数据存储插入到会话管理基础架构中。SessionSessionManager

CacheManager ( org.apache.shiro.cache.CacheManager )CacheManager创建和管理Cache其他 Shiro 组件使用的实例生命周期。因为 Shiro 可以访问许多后端数据源进行身份验证、授权和会话管理,所以缓存一直是框架中的一流架构特性,可以在使用这些数据源的同时提高性能。任何现代开源和/或企业缓存产品都可以插入 Shiro 以提供快速高效的用户体验。

Cryptography( org.apache.shiro.crypto.* ) 密码学是企业安全框架的自然补充。Shiro 的crypto包包含易于使用和理解的密码、哈希(又名摘要)和不同编解码器实现的表示。这个包中的所有类都经过精心设计,非常易于使用和理解。任何使用过 Java 原生加密支持的人都知道它是一种难以驯服的动物。Shiro 的加密 API 简化了复杂的 Java 机制,并使密码学对普通人来说很容易使用。

Realm( org.apache.shiro.realm.Realm ) 如上所述,领域充当 Shiro 和应用程序安全数据之间的“桥梁”或“连接器”。当需要与安全相关数据(如用户帐户)进行实际交互以执行身份验证(登录)和授权(访问控制)时,Shiro 会从为应用程序配置的一个或多个领域中查找其中的许多内容。您可以根据Realms需要配置任意数量(通常每个数据源一个),Shiro 将根据需要与它们协调以进行身份​​验证和授权。

4、shiro身份认证

1、认证

身份认证,就是判断一个用户是否为合法用户的处理过程。最常用的简单身份认证方式是系统通过和对用户输入的用户名和口令,看其是否与系统中存储的该用户的用户名和口令一致,来判断用户身份是否正确。

2、shiro 中认证的关键对象
subject 主体
访问系统的用户,主体可以是用户、程序等,进行认证的都称为主体
Principal 身份信息
是主体进行身份认证的标识,标识必须具有唯一性,例如用户名等,一个主体可以有多个身份,但是必须有一个主身份
credential 凭证信息
是只有主体自己指导的安全信息,如密码、证书等

3、认证流程

20220901shiroliucheng.png

4、认证开发

  1. 创建项目并引入依赖
<!-- https://mvnrepository.com/artifact/org.apache.shiro/shiro-core -->
<dependency>
  <groupId>org.apache.shiro</groupId>
  <artifactId>shiro-core</artifactId>
  <version>1.9.1</version>
</dependency>
  1. c创建shiro配置文件
[users]
xiaochen=1235
zhangsan=123567
lisi=123

20220901resourceini.png
3. 创建测试文件


import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.realm.text.IniRealm;
import org.apache.shiro.subject.Subject;

public class TestAuthenticator {
   public static void main(String[] args) {
       //1、创建安全管理器对象
       DefaultSecurityManager securityManager = new DefaultSecurityManager();
       // 2、给安全管理器设置realm
       securityManager.setRealm(new IniRealm("classpath:shiro.ini"));
       // 3、SecurityUtils 全局安全工具类
       SecurityUtils.setSecurityManager(securityManager);

       //4、关键对象 subject主体
       Subject subject = SecurityUtils.getSubject();

       // 5、登陆认证创建令牌
       AuthenticationToken authenticationToken = new UsernamePasswordToken("xiaochen","1235");
        // 5.1、用户认证
       try {
           System.out.println(subject.isAuthenticated());
           subject.login(authenticationToken);
           System.out.println(subject.isAuthenticated());

       }catch (IncorrectCredentialsException exception){
           System.out.print("密码错误");
           exception.printStackTrace();
       }
       catch (Exception c){
           c.printStackTrace();
       }
   }

}

至此,一个简单的shiro权限认证过程已经完成了

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

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

相关文章

【 uniapp - 黑马优购 | 加入购物车】如何配置 vuex、加入购物车功能并持久化

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大二在校生&#xff0c;讨厌编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;小新爱学习. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc…

ABP VNext 的日志机制 + SeriLog

** ABP VNext 的日志机制 ** 正用ABP VNext做个系统&#xff0c;由于框架默认带来日志处理机制&#xff0c;开发阶段基本能用&#xff0c;也一直没有去动它&#xff0c;快要上线了&#xff0c;思考了一下正式环境的日志管理流程&#xff0c;由于系统不大&#xff0c;预计访问…

第一章.机器学习基本概念

第一章.机器学习基本概念 1.1 第一章.机器学习基本概念 机器学习的本质就是&#xff1a;寻找一个函数。 1.不同种类的函数 1).Regression&#xff1a;The function outputs a scalar 说明:根据今天的PM2.5的一些参数来预测明天PM2.5值 2).Classification:Given option(classes…

STL vector 模拟实现

vector 概述 vector 的数据结构安排及操作方式&#xff0c;与原生数组十分相似&#xff0c;两者唯一的差别在于空间运用的灵活性。原生数组是静态空间&#xff0c;一旦配置了就不能改变大小&#xff1b;vector 是动态空间&#xff0c;可以在插入过程中动态调整空间大小。vecto…

Pivoting跳板攻击

跳板攻击&#xff08;Pivoting&#xff09;是Meterpreter提供的一种攻击方法&#xff0c;允许从Meterpreter终端攻击网络中的其他系统。假如攻击者成功的入侵了一台主机&#xff0c;他就可以任意的利用这台机器作为跳板攻击网络中的其他系统&#xff0c;或者访问由于路由问题而…

【ROS】tf2_geometry_msgs 出现 No module named ‘PyKDL‘

参考文章&#xff1a; PyCharm单独安装PyKDL 如何在基于python3的conda虚拟环境中从头编译PyKDL 1. 问题描述 import PyKDL ModuleNotFoundError: No module named PyKDL这是由于使用的环境中不存在 PyKDL 导致的&#xff0c;实际上 PyKDL 在装 ROS 的时候是一起装上了&#x…

基于Springboot搭建java项目(十八)——Java线程池原理和运用

​ 在上一篇博客中有说到线程的基本原理和用法&#xff0c;其实Java中开辟出了一种管理线程的概念&#xff0c;这个概念叫做线程池&#xff0c;线程池的好处&#xff0c;就是可以方便的管理线程&#xff0c;也可以减少内存的消耗。那么&#xff0c;我们应该如何创建一个线程池&…

JAVASE 基础知识点回顾

1.关键字Static static 有三个特点&#xff0c;这边先阐述一下&#xff0c;后面代码也会展示 static 可以修饰方法(静态方法)、成员变量(静态变量)&#xff0c;修饰不了类请注意&#xff01;随着类的加载而加载&#xff0c;优先于对象存在&#xff0c;说人话就是不new 对象也…

电机专用SVPWM算法实现

SH33F2811包含三相电机的空间矢量脉宽调制&#xff08;Space Vector Pulse Width Modulation&#xff0c;SVPWM&#xff09;算法&#xff0c;对应于交流感应电机或永磁同步电机中的三相电压源逆变器的功率器件的一种特殊的开关触发顺序和脉宽大小的组合。这种开关触发顺序和组合…

k8s部署 wiki.js ,带中文分词

官网 https://js.wiki/ https://docs.requarks.io/install/docker-desktop k8s postgres 安装 因为包含中文分词&#xff0c;要在原版的基础上增加分词插件。 这里直接使用别人已经 制作好的镜像 github 地址 : https://github.com/abcfy2/docker_zhparser 镜像地址&#x…

【 java 集合】Map 接口常用方法总结

&#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是阿牛&#xff0c;全栈领域优质创作者。&#x1f61c;&#x1f4dd; 个人主页&#xff1a;馆主阿牛&#x1f525;&#x1f389; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4d…

【面试】70道Spring Boot面试题答案

文章目录PartAPartB更多请参考来源PartA 1 什么是springboot &#xff1f; 用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置&#xff08;properties或yml文件&#xff09; 创建独立的spring引用程序 main方法运行 嵌入的Tomcat 无需部署war文件 简化m…

进程控制【Linux】

1.进程终止 1.1.进程退出场景 代码运行完毕&#xff0c;结果正确代码运行完毕&#xff0c;结果不正确代码异常终止 1.2.进程常见退出方法 常见的正常中止: 从main函数return返回调用exit_exit 查看进程退出码: echo $?(查看最近一次的进程退出码) 测试代码: include &l…

【CDP】Cloudera Manager 记录一次 Service Monitor 内存溢出/使用率高的问题及解决方案

一、问题描述 最近发现我们的生产环境 Service Monitor 的监控报表数据无法正常显示&#xff0c;有很多的断点&#xff0c;有很多数据没有被正常采集到&#xff0c;最后定位到是 service monitor 的JVM 内存使用率过高&#xff0c;导致频繁GC&#xff0c;使得 Service Monitor…

Zynq PL DDR4读写测试工程

基于XCZU21DR-2FFVD1156E开发&#xff0c;本文介绍对PL DDR4的读写操作&#xff0c;代码全部经过上板测试。 目录 添加DDR4 IP Basic Mode and Interface & Clocking Controller Options Advanced Clocking VIO IP配置 ILA IP配置 General Options Probe_Ports(0..7…

爬虫的基本使用

文章目录urllib库1、基本使用2、一个类型、六个方法3、下载操作4、请求对象的定制5、get请求的quote方法6、get请求的urlencode方法7、post请求百度翻译8、post请求百度翻译之详细翻译小技巧&#xff1a;正则替换9、agax的get请求豆瓣电影第一页**10、agax的get请求豆瓣电影的前…

使用容器跑一个zabbix 监控另外一个虚机的基础项

目录 安装docker mysql数据库部署 拉取mysql镜像 运行mysql服务器 创建zabbix用户和数据库 进入docker容器登陆数据库 创建zabbix数据库创建zabbix用户 zabbix用户授权 复制mysql初始化数据库文件到容器 导入zabbix初始化数据 zabbix服务器部署 拉取镜像 运行容器 效果…

Linux环境下,JAVA环境调用C++的动态链接库so

1、使用QT开发一个动态链接库.so&#xff08;本次使用linux环境&#xff0c;在windows下是.dll&#xff09; 代码文件包含 testdll.cpp testdll.h testdll.pro testdll_global.h testdll.pro #------------------------------------------------- # # Project created by QtC…

苹果手机怎么清理内存垃圾?2个方法,快速解决

很多小伙伴在生活中会使用手机来看视频、聊天、学习等等。不管是苹果手机还是安卓手机&#xff0c;使用手机的时间长了&#xff0c;里面就会产生很多垃圾占据手机空间。苹果手机怎么清理内存垃圾&#xff1f;今天小编就来分享2个方法&#xff0c;教你快速解决。 一、删除不常用…

ansible(第五天)

五、实施任务控制 161 1.循环&#xff08;迭代&#xff09;--- loop --item 1.利用loop----item循环迭代任务 with_* 通过循环管理员不需要编写多个使用同一模块的任务。例&#xff1a;他们不需要编写五个任务来确保存在五个用 户&#xff0c;而是只需要编写一个任务来对含有…