springboot+shiro入门学习(一)

SpringBoot与Shiro整合-权限管理实战视频及源码 Spring一直是很火的一个开源框架,在过去的一段时间里,Spring Boot在社区中热度一直很高,所以传智播客经常开课讲一讲这方面的知识点,为热爱编程技术的网友提前做好知识储备。 课程介绍: Spring Boot设计目的是用来简化Spring应用的初始搭建以及开发过程,而Shiro是一个强大且易用的Java权限框架,有身份验证、授权、加密和会话管理等功能。本课程重点讲解如何使用Spring Boot与Shiro进行无缝整合,实现强大的用户权限管理。 课程核心技术: Shiro框架功能简介; SpringBoot快速入门; Spring Boot与Shiro整合实现用户认证; Spring Boot与Shiro整合实现用户授权; thymeleaf和shiro标签整合使用。 立即下载

其实关于shiro的博客介绍特别多,这里记录一下自己的学习过程。

Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能。先简单的学习一下它的认证和授权。

shiro的认证过程

  先使用测试类的方式来验证:

SimpleAccountRealm

  1. 认证过程
     
    SimpleAccountRealm realm = new SimpleAccountRealm();
    	
    	@Before
    	public void addUser() {
    		realm.addAccount("admin", "123456");
    	}
    	
    	
    	@Test
    	public void testAuthentication() {
    		//创建一个SecurityManager对象
    		DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
    		defaultSecurityManager.setRealm(realm);
    		
    		//主体提交认证请求
    		SecurityUtils.setSecurityManager(defaultSecurityManager);
    		Subject subject =  SecurityUtils.getSubject();
    		
    		UsernamePasswordToken token = new UsernamePasswordToken("admin", "123456");
    		subject.login(token);
    		System.out.println("isAuthenticated:"+subject.isAuthenticated());
    	}

    当用户名和密码正确是打印出true

  2. 授权过程
     

    SimpleAccountRealm realm = new SimpleAccountRealm();
    	
    	@Before
    	public void addUser() {
    		realm.addAccount("admin", "123456","admin","user");
    	}
    	
    	
    	@Test
    	public void testAuthentication() {
    		//创建一个SecurityManager对象
    		DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
    		defaultSecurityManager.setRealm(realm);
    		
    		//主体提交认证请求
    		SecurityUtils.setSecurityManager(defaultSecurityManager);
    		Subject subject =  SecurityUtils.getSubject();
    		
    		UsernamePasswordToken token = new UsernamePasswordToken("admin", "123456");
    		subject.login(token);
    		System.out.println("isAuthenticated:"+subject.isAuthenticated());
    		subject.checkRoles("admin","user");
    		//subject.logout();
    	}

    需要注意的是:SimpleAccountRealm不支持权限

IniRealm:

  1. 认证过程
     
    IniRealm realm = new IniRealm("classpath:user.ini");
    	
    	@Before
    	public void addUser() {
    		realm.addAccount("admin", "123456","admin","user");
    	}
    	
    	
    	@Test
    	public void testAuthentication() {
    		//创建一个SecurityManager对象
    		DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
    		defaultSecurityManager.setRealm(realm);
    		
    		//主体提交认证请求
    		SecurityUtils.setSecurityManager(defaultSecurityManager);
    		Subject subject =  SecurityUtils.getSubject();
    		
    		UsernamePasswordToken token = new UsernamePasswordToken("admin", "123456");
    		subject.login(token);
    		System.out.println("isAuthenticated:"+subject.isAuthenticated());
    		//subject.checkRoles("admin","user");
    		//subject.logout();
    	}
    
    
    
    其中user.ini为resources下的一个文件,里面的内容为:
    
    [users]
    admin=123456

     

  2. 授权过程

    修改user.ini中的内容如下
    [users]
    admin=123456,admin
    [roles]
    admin=user:delete

    同时修改测试类的代码如下:
     

    IniRealm realm = new IniRealm("classpath:user.ini");
    	
    	@Test
    	public void testAuthentication() {
    		//创建一个SecurityManager对象
    		DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
    		defaultSecurityManager.setRealm(realm);
    		
    		//主体提交认证请求
    		SecurityUtils.setSecurityManager(defaultSecurityManager);
    		Subject subject =  SecurityUtils.getSubject();
    		
    		UsernamePasswordToken token = new UsernamePasswordToken("admin", "123456");
    		subject.login(token);
    		System.out.println("isAuthenticated:"+subject.isAuthenticated());
    		//subject.checkRoles("admin","user");
    		//subject.logout();
    		subject.checkRole("admin");
    		subject.checkPermission("user:delete");
    	}



    自定义realm

    创建Myrealm继承AuthorizingRealm
     

    Map<String, String> map = new HashMap<String, String>();
    	
    	{
    		map.put("admin", "123456");
    		super.setName("MyRealm");//这个名字可以随便取
    	}
    	
    	@Override
    	protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
    		//从主体传过来的认证信息中获取用户名
    		String userName = (String)principals.getPrimaryPrincipal();
    		
    		//模拟从数据库获取角色和权限
    		Set<String> roleSet = getRoleByUserName(userName);
    		Set<String> permissionSet = getPermissinByUserName(userName);
    		
    		SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
    		authorizationInfo.addRoles(roleSet);
    		authorizationInfo.addStringPermissions(permissionSet);
    		return authorizationInfo;
    	}
    
    
    	@Override
    	protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
    		
    		//从主体传过来的认证信息中获取用户名
    		String userName = (String)token.getPrincipal();
    		
    		//根据用户名获取密码,模拟从数据库获取
    		String password = getPassWord(userName);
    		if(password == null) {
    			return null;
    		}
    		SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(userName, password, "MyRealm");
    		
    		return simpleAuthenticationInfo;
    	}
    
    	private String getPassWord(String userName) {
    		String password = map.get(userName);
    		return password;
    	}
    	
    	/**
    	 * 从数据库获取角色
    	 * @param userName
    	 * @return
    	 */
    	private Set<String> getRoleByUserName(String userName) {
    		Set<String> set = new HashSet<String>();
    		set.add("admin");
    		set.add("aaaaa");
    		return set;
    	}
    	
    	private Set<String> getPermissinByUserName(String userName) {
    		Set<String> set = new HashSet<String>();
    		set.add("user:delete");
    		set.add("user:update");
    		return set;
    	}

    测试类:
     

    public class RealmTest {
    	
    	
    	
    	@Test
    	public void testAuthentication() {
    		MyRealm realm = new MyRealm();
    		
    		//创建一个SecurityManager对象
    		DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
    		defaultSecurityManager.setRealm(realm);
    		
    		//主体提交认证请求
    		SecurityUtils.setSecurityManager(defaultSecurityManager);
    		Subject subject =  SecurityUtils.getSubject();
    		
    		UsernamePasswordToken token = new UsernamePasswordToken("admin", "123456");
    		subject.login(token);
    		System.out.println("isAuthenticated:"+subject.isAuthenticated());
    		subject.checkRole("aaaaa");
    		subject.checkPermission("user:delete");
    		//subject.checkRoles("admin","user");
    		//subject.logout();
    	}
    
    }

     

传智播客2018年SpringBoot与Shiro整合-权限管理实战视频 传智播客2018年SpringBoot与Shiro整合-权限管理实战视频,老师一步一步写出代码,里面有讲和Mybatis的整合。 立即下载

相关推荐

SpringBoot与Shiro整合-权限管理实战视频+源码

SpringBoot与Shiro整合-权限管理实战视频+源码

Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个

Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个

nanshaws的博客 1059

shiro视频2018 shiro+springboot+mybatis

shiro视频2018 shiro+springboot+mybatis 1 Authentication 认证 用户登录 2 Authorization 授权 用户具有那些权限 3 cryptography 安全加密 4 session management 会话加密 5 web integration web 系统集成 6 interations 集成其它应用,spring 缓存框架

【SpringBoot】Shiro快速入门(精讲)

Apache Shiro 是一个java的安全(权限)框架 Shiro可以非常容易的开发出足够好的应用,其不仅可以用在JavaEE环境中,也可以用在JavaSE环境中 Shiro可以完成认证、授权、加密、会话管理、web集成、缓存等。 ...

✈ 正在努力 の 寒江(StudiousTiger) ✌ 呐 ✈ 1464

springboot+shiro最简单的demo

springboot+shiro+mybatis+thymeleaf整合的最简单的demo,并且注释齐全

AgentScope Java多智能体框架

AgentScope Java 的核心设计理念是“Agent-Oriented Programming” (面向智能体编程)。

zzz19920821的博客 1734

Springboot整合Shiro框架入门

Springboot整合Shiro框架入门 1、快速开始demo 2、Springboot集成Shiro 2.1、环境搭建 2.2、shiro的拦截 2.3、shiro的认证 2.4、整合mybatis 2.5、shiro进行授权 2.6、shiro整合thymeleaf 3、小结 1、快速开始demo 来到shiro的官网:shiro官方网站: 下载官方在git仓库上提供的源码,下载后解压: 官方提供了在多种场景下使用的demo,等一下会用到sample里面的东西。下面直接按官方推荐

web15285868498的博客 8317

用STM32F103单片机控制电调制动无刷电机

用电调控制无刷电机制作遥控飞艇 蓝牙控制 调控电调 无刷电机 用电调控制无刷电机制作遥控飞艇 代码区 mian.c #include "delay.h" #include "sys.h" #include "usart.h" #include "usart3.h" #include "timer.h" #include "led.h" #include "key.h" int main(v...

子非鱼 的博客 2万+

SpringBoot整合Shiro(超详细,适合新手学习,附有源码)

shiro是什么呢?Shiro是一个功能强大,简单易用的 Java 安全框架,提供了用户认证、授权、加密、会话管理、缓存等功能。和目前另一款Java安全框架Spring Security相比,Shiro更加轻便,易于上手。各功能点介绍Authentication:用户身份认证/登录,即验证用户是不是合法用户Authorization:用户权限验证,即验证用户是否拥有某个角色,是否拥有某个权限。

lianaozhe的博客 1644

非华为电脑也能用上鸿蒙生态?手把手教你给Win10/Win11装上最新华为电脑管家(附移动应用引擎开启方法)

本文详细介绍了如何在非华为品牌的Windows 10/11电脑上安装华为电脑管家并启用移动应用引擎,实现鸿蒙生态的无缝协同体验。从BIOS设置到安装步骤,再到性能优化和常见问题解决,手把手教你解锁跨设备高效工作流。

weixin_42542669的博客 4205

Java 简易版 UDP 多人聊天室

【代码】Java 简易版 UDP 多人聊天室。

nmy15570188135的博客 1187

springboot结合shiro入门学习(一)

其实关于shiro的博客介绍特别多,这里记录一下自己的学习过程。 简介 Shiro(希罗)的前身叫JSecurity项目,始于2003年,2008年加入Apache软件基金会并成为Apache顶级项目。 官网:http://shiro.apache.org/ github:https://github.com/apache/shiro Shiro是一个强大而灵活的开源Java安全框架,提供了认证、...

qq_36470898的博客 392

Ubuntu20.04下 嵌入式 Qt 开发环境的搭建(适用于Tiny6410)

Ubuntu 下 Tiny6410 嵌入式 Qt 开发环境的搭建 目录导航Ubuntu 下 Tiny6410 嵌入式 Qt 开发环境的搭建前言1.安装前的准备工作2.安装交叉编译器 前言 这篇文章,主要是基于 Ubuntu19.10版本而写,写此文的初衷,是为了自己使用,因为最近正在以Tiny6410板子做实训,所以也是初学者一枚,只能保证我遇上的问题统统能够解决掉,至于一些没遇上的,欢迎各位看客给我留言,大家一起讨论,一起解决。 注:本文会持续更新 1.安装前的准备工作 环境要求 Linux系统:U

繁臻的小窝 4894

Shiro身份认证学习笔记(一)Shrio体系结构 | 基于官方文档的快速入门 | MDK5 + salt 加密案例 | SpringBoot整合Shiro+SSM+Thymeleaf案例

此案例是参考第一个视频资料的,主要实现了多个框架的简单整合,对于Shiro的简单运用,要点如下: - Reaml模块负责于数据库交互,通过token进行参数传递,继承于AuthorizingRealm.java类,对用户实现授权与认证 - SecurityManager模块用于设置权限访问的问题,通过注入ShiroFilterFactoryBean配置安全管理器,通过注入DefaultWebSecurityManager关联传递的形参Reaml,还需注入之前Realm模块编写的类 - Shrio整合Thy

希望每天都能进步一点点 633

YOLOv11知识蒸馏实战:让小模型拥有大模型90%精度,速度提升3倍的终极教程

在self.alpha = alpha # 蒸馏损失权重self.temperature = temperature # 温度系数,控制分布平滑度# 输出分布蒸馏(KL散度损失)# 中间特征蒸馏(MSE损失,对齐中间层特征)# 总蒸馏损失知识蒸馏是YOLOv11在“小模型高性能部署”场景的“破局之法”——它让小模型能“站在大模型的肩膀上”,兼具速度与精度。从损失函数定义到多阶段训练,再到实战落地,本教程已为你铺就了一条清晰的路径。

m0_64661770的博客 800

SAP 批量修改 工艺路线 和 BOM

1、在运维的过程中经常会遇到用户需要批量更改组件,或者是批量更改数量,还是组件里面的一些标识,当处理这些批量数据处理的业务时,BOM的批量更改一个想到的就是CS20,但是CS20当BOM需要替换的时候就不是很适用。当前工作区域:选择 SAP_ITEM 对BOM行项目进行变更,工艺路线也是可以批量更改的,根据实际的业务进行选择,我这里选择的就是BOM的组件变更。5、本博客将使用新的一种方式进行BOM的批量变更,标准的事务代码:CEWB对BOM进行批量更改。3、使用LSMW的方式进行BOM的批量更改。

我小时候很黑的博客 4093

SpringBoot搭建Shiro的快速入门

章节目录1. Shiro1.1 Shiro简介1.2 Shiro三大核心组件1.2.1 Subject1.2.2 SecurityManager1.2.3 Realm1.3 Shiro的认证和授权流程1.3.1 认证流程1.3.2 授权流程2. SpringBoot集成Shiro并完成登录操作2.1 集成Shiro 1. Shiro Shiro官网 1.1 Shiro简介 以下为Shiro的简单介绍: Shiro 是一个强大、简单易用的 Java 安全权限框架 Shiro 可以非常容易的开发出足够好的应用

菩提小猿的博客 1717

裂缝二维检测:裂缝的长度和宽度检测

这一节,我们需要去整合一下前面的代码,在进行长度和宽度的测量时,需要裂缝的类型、个数、面积的帮助。这一章是本专栏的核心部分。以上代码我均试过,由于本人能力有限,看不懂代码,最终还是没有采用,使用的是最普通检测宽度的方法,即求得骨架总长度后,用总面积求取平均宽度。

m0_62919535的博客 4237

SpringBoot整合Shiro框架

目录 1、Shiro简介 1.1、Shiro是什么? 1.2、有哪些功能? 1.3、Shiro架构(外部) 2、快速入门(QuickStartShiro) 2.1、项目结构 2.2、导入shiro依赖,这是我的pom所有依赖。(pom.xml) 2.3、相关配置文件 (1)log4j.properties——官网 (2)shiro.ini——官网 (3)启动类 Quickstart——官网 3、SpringBoot集成Shiro框架 3.1SpringBoot整合Shir...

koko创作 8906

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Springboot整合shiro

是一款主流的Java安全框架,不依赖任何容器,可以运行在Java SE和Java EE项目中,它的主要作用是对访问系统的用户进行身份认证、授权、会话管理、加密等操作。Shiro 就是用来解决安全管理的系统化框架。Shiro是基于session的身份认证和访问控制框架。RBAC是Role-Based Access Control(基于角色的访问控制)的缩写。它是一种广泛应用于安全管理中的访问控制模型。RBAC模型通过授予用户不同的角色,并将角色与权限进行关联,来管理对资源的访问。

chao的博客 2797

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【Springboot学习】Shiro快速入门及与SpringBoot集成

目录1、Shiro简介1.1、Shiro 是什么?1.2、有哪些功能?1.3、Shiro架构(外部)1.4、Shiro架构(内部)2、Hello World2.1、快速实践3、SpringBoot集成3.1、SpringBoot整合Shiro环境搭建3.2、Shiro实现登录拦截3.3、Shiro实现用户认证3.4、Shiro整合Mybatis3.5、Shiro实现用户授权3.6、Shiro整合Thymeleaf3.7、所有代码4、完美的解释 1、Shiro简介 1.1、Shiro 是什么? Apach

胡毛毛的博客 1724

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

SpringBoot入门(一)SpringBoot项目的创建

SpringBoot相对于最早的三大框架SSH那一坨,还有之前的SpringMVC各种xml配置,简直是方便太多了,SpringBoot的主旋律就是AutoConfig,自动配置,简直不要太爽!如果你是一个安卓开发人员(或者懂Java语法),即便你从未接触过后端,也能很快上手! 直接入题,首先安装IDEA,最优秀的Java开发工具!IDEA是收费的,至于怎么可以白X,大家都懂! (另外,JDK环境变量是必不可少的,所以要先下载JDK8并安装配置环境变量)! 安装完毕后,打开IDEA: 第一步:创建新项目:

白玉梁的专栏 2917

Shiro入门学习(整合SpringBoot)

Apache Shiro是Java的一个安全(权限)框架 可以完成:认证、授权、加密、会话管理、与Web集成和缓存等 用户登录时把身份信息(用户名/手机号/邮箱地址等)和凭证信息(密码/证书等)封装成一个Token令牌,通过安全管理器中的认证器进行校验,成功则授权以访问系统 shiro三大功能模块 Subject:主体,一般指用户。 SecurityManager:安全管理器,管理所有Subject,可以配合内部安全组件。(类似于SpringMVC中的DispatcherServlet) Rea.

qq_25046827的博客 4745

Shiro学习笔记_04:Shiro整合springboot之 thymeleaf权限控制

Shiro 学习笔记 本文基于B站UP主【编程不良人】视频教程【2020最新版Shiro教程,整合SpringBoot项目实战教程】进行整理记录,仅用于个人学习交流使用。 视频链接:https://www.bilibili.com/video/BV1uz4y197Zm 官方文档:http://www.baizhiedu.xin 目录标题Shiro 学习笔记七、Shiro整合springboot之thymeleaf权限控制1.引入扩展依赖2.页面中引入命名空间3.常见权限控制标签使用4.加入shiro的方

耿鬼不会笑的博客 4228

springboot+shiro处理shiro中的异常

1.自定义realm中抛出异常信息 /** * @description:自定义Realm * @author: Administrator * @date: 2019-03-27 13:30 */ @Component public class MyRealm extends AuthorizingRealm { public static Log log = LogFacto...

大海无量的博客 6723
上一篇: springData学习(五)JpaRepository和JpaSpecificationExecutor接口学习
下一篇: springboot+shiro入门学习(二)
若往夕之
博客等级 码龄9年 20粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值