shrio----(1)基础

news2024/11/15 19:33:16

文章目录

    • 前言
  • 一、Shrio
    • 1、什么是shiro
    • 2、为什么使用shrio
  • 二、主要类
    • 2.1、Subject
    • 2.2、SecurityManager
    • 2.3、Realms
  • 三、认证授权
  • 3.1、认证(Authentication)
  • 3.2、授权(authorization)
  • 四、入门示例
  • 参考文章


前言

简单入门介绍

一、Shrio

http://shiro.apache.org/

1、什么是shiro

Apache Shiro™(trademark)是一个功能强大且易于使用的Java安全框架,用于执行身份验证,授权,加密和会话管理。使用Shiro易于理解的API,您可以快速轻松地保护任何应用程序-从最小的移动应用程序到最大的Web和企业应用程序。

2、为什么使用shrio

易于使用 -易于使用是该项目的最终目标。应用程序安全性可能非常令人困惑和沮丧,并被视为“必要的邪恶”。如果您使它易于使用,以使新手程序员可以开始使用它,那么就不必再痛苦了。

全面 -Apache Shiro声称没有其他具有范围广度的安全框架,因此它很可能是满足安全需求的“一站式服务”。

灵活 -Apache Shiro可以在任何应用程序环境中工作。尽管它可以在Web,EJB和IoC环境中运行,但并不需要它们。Shiro也不要求任何规范,甚至没有很多依赖性。

具有Web功能 -Apache Shiro具有出色的Web应用程序支持,允许您基于应用程序URL和Web协议(例如REST)创建灵活的安全策略,同时还提供一组JSP库来控制页面输出。

可插拔 -Shiro干净的API和设计模式使它易于与许多其他框架和应用程序集成。您会看到Shiro与Spring,Grails,Wicket,Tapestry,Mule,Apache Camel,Vaadin等框架无缝集成。

支持 -Apache Shiro是Apache Software Foundation(Apache软件基金会)的一部分,该组织被证明以其社区的最大利益行事。项目开发和用户群体友好的公民随时可以提供帮助。如果需要,像Katasoft这样的商业公司也可以提供专业的支持和服务。
在这里插入图片描述

二、主要类

2.1、Subject

import org.apache.shiro.subject.Subject;
import org.apache.shiro.SecurityUtils;
Subject currentUser = SecurityUtils.getSubject();

Subject一词是一个安全术语,基本上表示“当前正在执行的用户”。它只是意味着“当前正在与软件交互的东西”。它只是不被称为“用户”,因为“用户”一词通常与人类相关联。在安全的世界,术语“主题”可以指一个人,但也有会谈进程,守护进程帐户,或任何类似。

2.2、SecurityManager

主题的“幕后”对应对象是SecurityManager。主题代表当前用户的安全操作,而SecurityManager管理所有用户的安全操作。它是Shiro体系结构的核心,并充当一种“伞”对象,引用了许多内部嵌套的安全组件,这些安全组件构成了一个对象图。它管理着所有 Subject、且负责进行认证和授权、及会话、缓存的管理。每个应用程序几乎总是有一个SecurityManager实例。它本质上是一个应用程序单例(尽管不必是静态单例)普通的Java代码,Spring XML,YAML,.properties和.ini文件等进行配置

ini文件方式,实例化SecurityManager 配置:
#CredentialsMatcher 认证匹配器
cm = org.apache.shiro.authc.credential.HashedCredentials

Matcher
cm.hashAlgorithm = SHA-512
cm.hashIterations = 1024
#Base64 encoding (less text):
cm.storedCredentialsHexEncoded = false

[users]

jdoe = TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJpcyByZWFzb2
asmith = IHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbXNoZWQsIG5vdCB

[roles]

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.util.Factory;

// 1。加载INI配置
Factory factory =
new IniSecurityManagerFactory(“ classpath:shiro.ini”);

// 2。创建SecurityManager
SecurityManager securityManager = factory.getInstance();

// 3。使它可访问
SecurityUtils.setSecurityManager(securityManager);

2.3、Realms

Realms充当Shiro与应用程序的安全数据之间的“桥梁”或“连接器”,也就是说,当需要真正与安全性相关的数据(例如用户帐户)进行交互以执行身份验证(登录)和授权(访问控制)时,Shiro会从为应用程序配置的一个或多个Realms中查找其中的许多内容。本质上是特定于安全性的DAO:它封装了数据源的连接详细信息,并根据需要使关联数据可用于Shiro。

#数据源
dataSource=org.apache.commons.dbcp.BasicDataSource
#数据源链接要素
dataSource.driverClassName=oracle.jdbc.driver.OracleDriver
dataSource.url=jdbc:oracle:thin:@localhost:1521:orcl
dataSource.username=scott
dataSource.password=tiger
#jdbcrealm
jdbcrealm=org.apache.shiro.realm.jdbc.JdbcRealm
#jdbcrealm需要用到的数据源
jdbcrealm.dataSource=KaTeX parse error: Expected 'EOF', got '#' at position 13: dataSource #̲开启查找权限 jdbcrea…jdbcrealm

三、认证授权

3.1、认证(Authentication)

身份验证是验证用户身份的过程。也就是说,当用户通过应用程序进行身份验证时,他们在证明自己实际上就是他们所说的身份。有时也称为“登录”。这通常是一个三步过程。

  1. 收集用户的标识信息(称为主体 用户名)和支持身份的凭证(称为凭据 密码)。
    AuthenticationToken token = new UsernamePasswordToken(username, password);
  2. 将主体和凭据提交到系统。
    Subject currentUser = SecurityUtils.getSubject();
    currentUser.login(token);
  3. 如果提交的凭据与系统对该用户身份的期望匹配,则认为该用户已通过身份验证。如果它们不匹配,则不认为用户已通过身份验证。
    try {
    currentUser.login(token);
    //通过身份验证,执行其他业务
    } catch (IncorrectCredentialsException ice) {
    //密码错误
    } catch (LockedAccountException lae) {
    //账户锁定(默认系统不提供,可以编写代码过程中自己实现)
    }
    … //许多其他异常
    catch (AuthenticationException ae) {
    //上面配置的异常的父类
    }

3.2、授权(authorization)

授权本质上是访问控制-控制用户可以在应用程序中访问的内容(例如资源,网页等)。大多数用户通过使用角色和权限等概念来执行访问控制。也就是说,通常根据分配给他们的角色和/或权限,允许用户执行某项操作或不执行某项操作。
判断角色:
if ( subject.hasRole(“administrator”) ) {
//show the ‘Create User’ button
} else {
//grey-out the button?
}
判断权限:
if ( subject.isPermitted(“user:create”) ) {
//show the ‘Create User’ button
} else {
//grey-out the button?
}

四、入门示例

参考文章

个人笔记,不同意见,望有交流
直接可以点击跳转连接

作者

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

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

相关文章

配置mvn打包参数,不同环境使用不同的配置文件

方法一: 首先在/resource目录下创建各自环境的配置 要在不同的环境中使用不同的配置文件进行Maven打包,可以使用Maven的profiles特性和资源过滤功能。下面是配置Maven打包参数的步骤: 在项目的pom.xml文件中,添加profiles配置…

前端实现菜单快速检索的功能

前端CSS <style type"text/css">.btn-box {color: #fff;width: auto;border-radius: 25px;min-width: 40px;height: 40px;margin: 9px;line-height: 40px;display: inline-block;position: relative;overflow: hidden;background-image: linear-gradient(315de…

MySQL-03-索引

索引是提高MySQL查询性能的一个重要途径&#xff0c;但过多的索引可能会导致过高的磁盘使用率以及过高的内存占用&#xff0c;从而影响应用程序的整体性能。应当尽量避免事后才想起添加索引&#xff0c;因为事后可能需要监控大量的SQL才能定位到问题所在&#xff0c;而且添加索…

NX二次开发UF_CSYS_create_csys 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CSYS_create_csys Defined in: uf_csys.h int UF_CSYS_create_csys(const double csys_origin [ 3 ] , tag_t matrix_id, tag_t * csys_id ) overview 概述 Creates a CSYS. 创…

单片机串口通用收发代码

本篇博客大部分是自己收集和整理&#xff0c;借鉴了很多大佬的图片和知识点整理&#xff0c;如有侵权请联系我删除。本博客内容原创&#xff0c;创作不易&#xff0c;转载请注明 串口接收最后应有一定的协议&#xff0c;如发送一帧数据应该有头标志或尾标志&#xff0c;也可两个…

Unity阻止射线穿透UI的方法之一

if(UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject()) return; 作者&#xff1a;StormerZ https://www.bilibili.com/read/cv27797873/ 出处&#xff1a;bilibili

名酒新周期,西凤复兴的“四个自信”

执笔 | 文 清 编辑 | 萧 萧 11月18日&#xff0c;四大名酒之一、凤香品类龙头企业的西凤酒&#xff0c;携全系列产品亮相AIIC酒业创新展暨中国名酒成就展。 在当日下午举行的“筑梦新征程”2023中国名酒纪念大会暨《大师》影像志上线仪式上&#xff0c;陕西西凤酒股份有限…

uni微信小程序 map 添加padding

问题背景&#xff1a; 规划驾车线路的时候&#xff0c;使用uni的include-points指定可视范围的时候&#xff0c;会很极限。导致marker不能完全显示。 解决方法 给地图显示范围添加padding (推荐) <mapid"myMap":markers"markers":polyline"pol…

【Rxjava详解】(四)线程切换

lift()变换原理 这些变换虽然功能各有不同&#xff0c;但实质上都是针对事件序列的处理和再发送。而在RxJava的内部&#xff0c;它们是基于同一个基础的变换方法&#xff1a;lift()。 首先看一下lift() 的内部实现&#xff08;仅显示了部分主要逻辑代码): public <R> …

系列六、声明式事务(注解方式)

一、概述 声明式事务(declarative transaction management)是Spring提供的对程序事务管理的一种方式&#xff0c;Spring的声明式事务顾名思义就是采用声明的方式来处理事务。这里所说的声明&#xff0c;是指在配置文件中声明&#xff0c;用在Spring配置文件中声明式的处理事务来…

英语学习软件 Eudic欧路词典 mac中文版介绍说明

欧路词典 mac (Eudic) 是一个功能强大的英语学习工具&#xff0c;它包含了丰富的英语词汇、短语和例句&#xff0c;并提供了发音、例句朗读、单词笔记等功能。 Eudic欧路词典 mac 软件介绍 多语种支持&#xff1a;欧路词典支持多种语言&#xff0c;包括英语、中文、日语、法语…

opencv-使用 Haar 分类器进行面部检测

Haar 分类器是一种用于对象检测的方法&#xff0c;最常见的应用之一是面部检测。Haar 分类器基于Haar-like 特征&#xff0c;这些特征可以通过计算图像中的积分图来高效地计算。 在OpenCV中&#xff0c;Haar 分类器被广泛用于面部检测。以下是一个简单的使用OpenCV进行面部检测…

ECharts与DataV:数据可视化的得力助手

文章目录 引言一、ECharts简介优势&#xff1a;劣势&#xff1a; 二、DataV简介优势&#xff1a;劣势&#xff1a; 三、ECharts与DataV的联系四、区别与选择五、如何选择根据需求选择技术栈考虑预算和商业考虑 结论我是将军&#xff0c;我一直都在&#xff0c;。&#xff01; 引…

实时LCM的ImgPilot搭建部署

ImgPilot是具有实时潜在一致性模型&#xff08;LCM&#xff09;功能的图像试点 下载源码 GitHub - leptonai/imgpilot: Image pilot with the power of Real-Time Latent Consistency Modelhttps://github.com/leptonai/imgpilot安装前端web cd imgpilot npm install 安装…

141.【Git版本控制-本地仓库-远程仓库-IDEA开发工具全解版】

Git-深入挖掘 (一)、Git分布式版本控制工具1.目标2.概述(1).开发中的实际常见(2).版本控制器的方式(3).SVN (集中版本控制器)(4).Git (分布版本控制器)(5).Git工作流程图 (二)、Git安装与常用命令1.Git环境配置(1).安装Git的操作(2).Git的配置操作(3).为常用的指令配置别名 (可…

在Windows系统上安装git-Git的过程记录

01-上git的官网下载git的windows安装版本 下载页面链接&#xff1a; https://git-scm.com/downloads 选择Standalone Installer的版本进行下载&#xff1a; 这里给大家一全git-2.43.0的百度网盘下载链接&#xff1a; https://pan.baidu.com/s/11HwNTCZmtSWj0VG2x60HIA?pwdut…

【23真题】最简单的211!均分141分!

今天分享的是23年河海大学863的信号与系统试题及解析。 我猜测是由于23年太简单&#xff0c;均分都141分&#xff0c;导致24考研临时新增一门数字信号处理&#xff01;今年考研的同学赶不上这么简单的专业课啦&#xff01; 本套试卷难度分析&#xff1a;平均分为102和141分&a…

2023年 TOP5 知识库软件大盘点

在当今信息爆炸的时代&#xff0c;企业需要有效管理和组织海量的知识和信息。知识库软件成为了企业获取、存储和共享知识的重要工具。随着技术的不断进步和市场竞争的加剧&#xff0c;2023年很多知识库软件突破重围&#xff0c;在SaaS行业有很高的知名度。接下来就盘点一下2023…

c语言通过前序遍历构建二叉树

前言&#xff1a; 在链式二叉树中&#xff0c;我们一般都是通过一个建立好的二叉树从而算出他的前序遍历&#xff0c;那么如何通过一个前序遍历来创建一个二叉树呢&#xff0c;本文将详细解读前序遍历每一个步骤是如何创建二叉树的。 1、分析前序遍历&#xff0c;构建出二叉树…

【Go语言从入门到实战】反射编程、Unsafe篇

反射编程 reflect.TypeOf vs reflect.ValueOf func TestTypeAndValue(t *testing.T) {var a int64 10t.Log(reflect.TypeOf(a), reflect.ValueOf(a))t.Log(reflect.ValueOf(a).Type()) }判断类型 - Kind() 当我们需要对反射回来的类型做判断时&#xff0c;Go 语言内置了一个…