shiro入门demo

  搭建springboot项目,引入以下依赖:

  <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--单元测试--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--shiro--><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId><version>1.2.2</version></dependency></dependencies>

一、身份验证:

1、登录/退出:

(1)数据mock:新建shiro-user.ini文件

[users]
zs=123
ls=123
admin=123

(2)单元测试:

import com.demo.shiro.ShiroApplication;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;/*** 身份验证*/
@SpringBootTest(classes = {ShiroApplication.class}, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@RunWith(SpringRunner.class)
public class ShiroAuthenticationTest {/*** 1、登陆/退出,以admin/123用户为例*/@Testpublic void testLoginInAndPut(){//1、创建SecurityManagerFactory,用户名/密码硬编码在ini文件,实际应存储在数据库并将密码加密IniSecurityManagerFactory factory=new IniSecurityManagerFactory("classpath:shiro-user.ini");//2、创建安全管理器SecurityManager,并绑定给SecurityUtilSecurityManager securityManager = factory.getInstance();SecurityUtils.setSecurityManager(securityManager);//3、通过SecurityUtil获取登入用户主体subject,并创建tokenSubject subject = SecurityUtils.getSubject();UsernamePasswordToken token=new UsernamePasswordToken("admin", "123");//用户认证(shrio的核心功能之一)try {//异常//4、登录,即身份验证subject.login(token);System.out.println("认证成功");} catch (AuthenticationException e) {//5、认证失败//org.apache.shiro.authc.UnknownAccountException:账号错误异常//org.apache.shiro.authc.IncorrectCredentialsException:密码错误异常//org.apache.shiro.authz.UnauthorizedException: 授权错误异常System.out.println("认证失败");e.printStackTrace();}//6、安全退出subject.logout();}
}

执行,控制台输出:认证成功;

将密码改为123456,抛出密码错误异常

如上代码可总结出身份验证的步骤:

1)收集用户身份 / 凭证,即如用户名 / 密码;
2)调用 Subject.login 进行登录,如果失败将得到相应的 AuthenticationException 异常,根据异常提示用户错误信息;否则登录成功;
3)最后调用 Subject.logout 进行退出操作。 

二、角色验证:

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

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

相关文章

集的增删操作

集是可以修改的&#xff0c;增加元素可以用add和update函数。删除可以用pop、discard、remove等函数。 1 增加集里的元素 add函数的参数视为一个整体插入到集里&#xff0c;而update函数传入的参数是把要传入的元素拆分&#xff0c;做为个体传入到集合中。 s set("hell…

.9.png的创建

1、创建.9.png 选中图片&#xff0c;右击&#xff0c;选择Create 9-Patch file&#xff0c;点击确定会生成一个xxx.9.png的图片 2、绘制拉伸区域 在图片的最外边界绘制拉伸区域&#xff0c;按住鼠标左键不放&#xff0c;绘制完成后保存就可以使用了。绘制结果示意如下&…

phpstudy小皮(PHP集成环境)下载及使用

下载 https://www.xp.cn/download.html直接官网下载即可&#xff0c;下载完解压是个.exe程序&#xff0c;直接点击安装就可以&#xff0c;它会自动在D盘目录为D:\phpstudy_pro 使用 phpMyAdmin是集成的数据库可视化&#xff0c;这里需要下载一下&#xff0c;在软件管理-》网站程…

OPPO怎么录屏?教程来了,让你成为录屏达人

“有人知道OPPO怎么录屏吗&#xff0c;前阵子刚买的OPPO手机&#xff0c;用起来感觉挺流畅的&#xff0c;功能也很齐全&#xff0c;最近因为工作原因&#xff0c;需要用到录屏功能&#xff0c;但是我不知道怎么打开&#xff0c;就想问问大伙&#xff0c;OPPO怎么录屏呀。” 在…

Redis分片集群一步一步全过程搭建

文章目录 Redis搭建分片集群1. 搭建的分片集群结构2.准备实例和配置&#xff08;1&#xff09;创建目录&#xff08;2&#xff09;创建配置文件&#xff08;3&#xff09;将这个文件拷贝到每个目录下&#xff08;4&#xff09;修改每个目录下的redis.conf&#xff0c;将其中的6…

Yocto 还是 Buildroot,构建自定义嵌入式系统时,您会选择哪一种?

假设您正在采用集成平板开发新一代大型智能微波炉。这个创意不错吧&#xff01;现在&#xff0c;您需要构建自定义操作系统&#xff0c;在保证不会烧焦食物&#xff08;更不要烧毁房屋哦&#xff09;的前提下&#xff0c;辅助管理各项事务。除此之外&#xff0c;您还需要创建一…

px? pt? dp? em?rem?vw?vh?ch?ex?这些单位你了解吗?

目录 前言 一、常见单位 1、px单位 2、dp单位 3、pt单位 4、百分比% 5、em单位 6、rem单位 7、vw和vh单位 8、ch、ex单位 二、如何换算 1、 pt和px换算 2、px和dp换算 3、em和px换算 4、rem和px换算 三、总结 前言 前端开发在日常设计中除了最常用的 px 以外&…

第二十八章 控制到 XML 模式的映射 - 流类到 XML 类型的映射

文章目录 第二十八章 控制到 XML 模式的映射 - 流类到 XML 类型的映射将集合属性映射到 XML 模式 第二十八章 控制到 XML 模式的映射 - 流类到 XML 类型的映射 如果类或属性基于流&#xff0c;则它将投影为 XML 类型&#xff0c;如下表所示&#xff1a; IRIS 流的 XML 类型 …

使用BeautifulSoup 4和Pillow合并网页图片到一个PDF:一种高效的方式来处理网页图像

背景 ​ 网页上的培训材料&#xff0c;内容全是PPT页面图片。直接通过浏览器打印&#xff0c;会存在只打印第一页&#xff0c;并且把浏览器上无效信息也打印出来情况。但目标是希望将页面图片全部打印为pdf形式。 实现方案 利用网页“另存为”&#xff0c;将页面内所有图片资…

官宣!「湾区之光群星演唱会」拉开2024新年音乐华丽序幕!

万众期待&#xff0c;群星荟萃&#xff01;青春宝安时尚湾区——湾区之光群星演唱会即将在2024年1月5日闪耀亮相深圳宝安。 华语歌坛巨星天后齐聚一堂&#xff0c;携手多位实力唱将&#xff0c;共同呈现一场无与伦比的演唱会盛宴&#xff01;在深情而又充满力量的歌声之中&…

Linux修复磁盘坏道,重新挂载硬盘

修复磁盘 挂载报错&#xff1a; [rootlocalhost ~]$ mount /dev/sdb /mnt/mydevmount: /dev/sdb is write-protected, mounting read-only mount: wrong fs type, bad option, bad superblock on /dev/sdb,missing codepage or helper program, or other errorIn some cases …

15、lambda表达式、右值引用、移动语义

前言 返回值后置 auto 函数名 (形参表) ->decltype(表达式) lambda表达式 lambda表达式的名称是一个表达式 (外观类似函数)&#xff0c;但本质绝非如此 语法规则 [捕获表] (参数表) 选项 -> 返回类型 { 函数体; }lambda表达式的本质 lambda表达式本质其实是一个类…

textarea文本框回车enter的时候自动提交表单,根据内容自动高度

切图网近期一个bootstrap5仿chatgpt页面的项目遇到的&#xff0c;textarea文本框回车enter的时候自动提交表单&#xff0c;根据内容自动高度&#xff0c;代码如下&#xff0c;亲测可用。 <textarea placeholder"Message ChatGPT…" name"" rows"&q…

TypeScript 第五节:条件语句

一、TypeScript 中常用的条件语句 TypeScript 的条件语句与 JavaScript 的条件语句类似&#xff0c;包括 if 语句、if...else 语句、switch 语句等。 1、if 语句 if 语句用于判断指定条件是否为 true&#xff0c;如果是 true&#xff0c;则执行一段代码块。 示例&#xff1a;…

命名空间this_thread

命名空间 - this_thread 在C11中不仅添加了线程类&#xff0c;还添加了一个关于线程的命名空间std::this_thread&#xff0c;在这个命名空间中提供了四个公共的成员函数&#xff0c;通过这些成员函数就可以对当前线程进行相关的操作了。 1.get_id() 调用命名空间std::this_t…

java脚本引擎Groovy动态执行

1.java脚本引擎Groovy实战_groovy脚本-CSDN博客 2.java可用的动态脚本引擎和动态代码执行_java动态执行代码片段-CSDN博客 3.Groovy动态加载Java代码的使用方法和工具类_groovy调用java类方法-CSDN博客 4.springboot应用动态运行groovy脚本-附源码 - 简书 (jianshu.com) 5.…

是不是学了低代码就自动放弃了高薪?内部资深解答来了!

目录 前言低代码开发&#xff1a;点餐还是自助烹饪&#xff1f;低代码的“菜单”低代码的局限性 市场影响的分析&#xff1a;一场关于低代码的对话低代码开发与程序员职业&#xff1a;名人视角解析总结 前言 近年来&#xff0c;低代码开发因其低门槛、高效率和易集成的特点受到…

conda 计算当前包的个数

Conda是一个强大的包管理器和环境管理器&#xff0c;它用于安装和管理来自不同源的软件包。若要计算当前conda环境中安装的包的数量&#xff0c;你可以使用以下命令&#xff1a; 首先&#xff0c;激活你想要检查的conda环境&#xff08;如果不是默认的base环境&#xff09;&am…

虹科新闻丨广州市“强企增效”项目助力虹科高质量发展!

来源&#xff1a;虹科电子科技有限公司 虹科新闻丨广州市“强企增效”项目助力虹科高质量发展&#xff01; 原文链接&#xff1a;https://mp.weixin.qq.com/s/9pUXx5ZZpIi5S4s4o90GJA 欢迎关注虹科&#xff0c;为您提供最新资讯&#xff01; 2023年12月6日至7日&#xff0c;工…

hive/spark用法记录

1. cast()更改数据类型 cast(column_name as type) 2. get_dt_date()自定义日期操作函数&#xff08;返回不带横线的日期&#xff09; select get_dt_date();–获取当前日期&#xff0c;返回 20170209 select get_dt_date(get_date(-2));–获取当前日期偏移&#xff0c;转为…