springboot+shiro入门学习(一)

SpringBoot整合Shiro Shiro是一个开源的Java安全框架,它提供了身份认证、授权、加密和会话管理等功能,可以帮助我们快速地构建安全可靠的应用程序。 阅读详情

其实关于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();
    	}
    
    }

     

springboot+shiro快速入门 maven项目 可直接运行 springboot+shiro快速入门 有注释 内含建表语句 立即下载

相关推荐

SpringBoot + Shiro,单WEB项目的简单权限案例

SpringBoot + Shiro,单WEB项目的简单权限案例

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

springboot教程项目代码

springboot教程项目代码 https://blog.youkuaiyun.com/hellozpc/article/details/82531834

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

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

nanshaws的博客 1059

使用PackStack工具自动化部署OpenStack

搭建 OpenStack 环境,每个组件的安装和配置都需要熟悉其特定的依赖关系、参数设置等,对于初学者来说容易出错。PackStack 工具通过集成一系列脚本和配置文件,便于快速搭建OpenStack练习环境。CPU:支持 Intel VT - x 或 AMD - V 硬件虚拟化技术,并且要在 BIOS 里开启此功能。内存:16GB以上存储:200GB以上可用空间(2)VMware WorkStation16.0以上版本(3)远程连接工具(如Xshell、MobaXterm)

2301_80440447的博客 4094

opencv-meshgrid

使用opencv::repeat函数和std::iota函数完成meshgrid功能。 X Y Z 通俗的说就是根据Z的大小生成X矩阵,Y矩阵

yuegooxi的博客 1607

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

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

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

Obsidian的Git插件设置配置全流程 -- 简单的电脑端多平台同步方案及常见问题

Git同步obsidian的保姆级教程和常见问题

weixin_44370439的博客 1万+

Spring Boot整合Apache Shiro权限认证框架(基础篇)

本文详细介绍了在SpringBoot项目中整合Apache Shiro实现认证和授权的完整流程。主要内容包括:1)创建SpringBoot项目并添加Shiro依赖;2)配置数据库和用户表;3)实现公共响应类和异常处理;4)创建Shiro核心组件(Realm、配置类);5)实现登录认证功能;6)通过权限控制实现接口访问限制。文章提供了完整的代码示例,包括前端页面交互和后端接口实现,并演示了权限验证效果。通过本文可以快速掌握Shiro在SpringBoot中的基本应用,为项目添加安全控制层。

沐雨橙风ιε的博客 1万+

统信UOS/麒麟Kylin OS下利用pyenv实现Python多版本开发环境搭建指南

本文详细介绍了在统信UOS和麒麟Kylin OS国产操作系统下使用pyenv搭建Python多版本开发环境的完整指南。从系统环境准备、pyenv定制安装到Python版本编译实战,提供了针对国产CPU架构的特殊优化方案和常见问题解决方法,帮助开发者高效管理不同Python版本需求。

sea99的博客 1050

DiffusionDrive实战:如何用截断扩散模型3个月搞定自动驾驶轨迹规划(附代码)

本文详细介绍了如何利用DiffusionDrive截断扩散模型,在三个月内快速构建端到端的自动驾驶轨迹预测系统。内容涵盖从环境搭建、数据处理、模型架构解析到训练调参和推理优化的完整实战流程,并提供了关键代码示例,旨在帮助开发者高效实现高质量的自动驾驶轨迹规划。

weixin_35578748的博客 143

springboot结合shiro入门学习(一)

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

qq_36470898的博客 392

【最全】ISTQB- FL模拟题(含答案)

汇总收集的所有ISTQB基础级考题和答案

maoxuexue的博客 1万+

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

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

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

Qt图形视图框架实战:QGraphicsScene、QGraphicsView与QGraphicsItem的深度应用

本文深入解析Qt图形视图框架的核心组件QGraphicsScene、QGraphicsView与QGraphicsItem的实战应用。通过“舞台、镜头与演员”的比喻,清晰阐述了三者的协作关系,并详细介绍了场景管理、多视图同步、交互增强、自定义图形项绘制与性能优化等高级技巧,帮助开发者高效构建复杂的交互式图形界面。

weixin_29251337的博客 263

时间加强控制图,累计和控制图详细介绍,公式,计算 UCL,LCL,CL, sigma,C#实现

\(k\):参考值(通常取为检测偏移量的一半,例如 \(k = \frac{\delta \sigma}{2}\),\(\delta\)是希望检测的偏移量,\(\sigma\)是过程标准差)。- 示例中假设目标均值 \(\mu_0 = 10.0\),标准差 \(\sigma = 0.5\),参考值 \(k = 0.25\)(检测1σ偏移),控制限常数 \(h = 4\)。例如,若希望检测1个标准差的偏移(\(\delta = 1\)),则 \(k = 0.5\sigma\)。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 810

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

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

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

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Springboot整合shiro

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

chao的博客 2797

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【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

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

Shiro入门(整合springboot)

Shiro入门 1. 概念 Apache Shiro是一个java的安全(权限)框架,可以非常容易地开发出足够号地应用,其不仅可以用在JAVASE环境,也可以用在JAVAEE环境,可以完成认证、授权、加密、会话管理、web集成、缓存等; 三大组件 Subject:代表当前主体,与当前应用交互的任何东西都是subject; SecurityManager:安全管理器,所有有关安全的操作均与此有关。是shiro核心,负责与其他组件交互; Realm:Shiro 从 Realm 获取安全数据(如用户、角

weixin_41961894的博客 169
上一篇: 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、付费专栏及课程。

余额充值