使用shiro框架进行认证拦截

news2024/9/25 15:25:23

01.需要添加依赖
在springboot项目中,使用shiro框架需要在pom.xml文件中去添加依赖:

org.apache.shiro
shiro-spring
1.4.1

02.shiro核心对象配置
这里需要配置一个配置类,使用的注解是@Configuration,这表示修饰的类会有多个注解@bean来修饰的方法,而@bean修饰的方法通常用于构造一个对象,并且交给spring容器进行
第一步:创建 SpringShiroConfig 类。关键代码如下:
package com.cy.pj.common.config;
/**@Configuration 注解描述的类为一个配置对象,
* 此对象也会交给 spring 管理
*/
@Configuration
public class SpringShiroConfig {//spring-shiro.xml

}

第二步:在 Shiro 配置类中添加 SecurityManager 配置,关键代码如下:
@Bean
public SecurityManager securityManager() {
DefaultWebSecurityManager sManager=new DefaultWebSecurityManager();
return sManager;
}
第三步:在 Shiro 配置类中添加 ShiroFilterFactoryBean 对象的配置。通过此对象设置资源匿名访问、认证访问。关键代码如下:
/**

  • 配置 ShiroFilterFactoryBean 对象

  • 基于此对象创建过滤器工厂,通过过滤器工厂创建过滤器,通过过滤器对请求过滤

  • @param securityManager

  • @return
    */
    @Bean
    public ShiroFilterFactoryBean shiroFilterFactory (SecurityManager securityManager) {
    ShiroFilterFactoryBean sfBean=new ShiroFilterFactoryBean();
    //设置安全管理器
    sfBean.setSecurityManager(securityManager);

    //定义 map 指定请求过滤规则(哪些资源允许匿名访问,哪些必须认证访问)
    LinkedHashMap<String,String> map= new LinkedHashMap<>();
    //静态资源允许匿名访问:“anon”
    map.put("/bower_components/",“anon”);
    map.put("/build/
    ",“anon”);
    map.put("/dist/",“anon”);
    map.put("/plugins/
    ",“anon”);
    //除了匿名访问的资源,其它都要认证(“authc”)后访问
    map.put("/**",“authc”);
    sfBean.setFilterChainDefinitionMap(map);
    return sfBean;
    }
    在这里插入图片描述

Shiro 登陆页面呈现

  1. 服务端 Controller 实现
    业务描述及设计实现
    当服务端拦截到用户请求以后,判定此请求是否已经被认证,假如没有认证应该先跳转到登录页面。
    第一步:在 PageController 中添加一个呈现登录页面的方法,关键代码如下:
    @RequestMapping(“doLoginUI”)
    public String doLoginUI(){
    return “login”;
    }
    第二步:修改 SpringShiroConfig 类中 shiroFilterFactorybean 的配置,添加登陆 url 的设置。关键代码见 sfBean.setLoginUrl("/doLoginUI")部分。

    /**

  • 配置 ShiroFilterFactoryBean 对象
  • 基于此对象创建过滤器工厂,通过过滤器工厂创建过滤器,通过过滤器对请求过滤
  • @param securityManager
  • @return
    */
    @Bean
    public ShiroFilterFactoryBean shiroFilterFactory (SecurityManager securityManager) {
    ShiroFilterFactoryBean sfBean=new ShiroFilterFactoryBean();
    //设置安全管理器
    sfBean.setSecurityManager(securityManager);
    //设置登陆页面
    sfBean.setLoginUrl("/doLoginUI");
    //定义 map 指定请求过滤规则(哪些资源允许匿名访问,哪些必须认证访问)
    LinkedHashMap<String,String> map= new LinkedHashMap<>();
    //静态资源允许匿名访问:“anon”
    map.put("/bower_components/",“anon”);
    map.put("/build/
    ",“anon”);
    map.put("/dist/",“anon”);
    map.put("/plugins/
    ",“anon”);
    //除了匿名访问的资源,其它都要认证(“authc”)后访问
    map.put("/**",“authc”);
    sfBean.setFilterChainDefinitionMap(map);
    return sfBean;
    }

客户端页面实现

业务描述及设计实现。
在/templates/pages/添加一个 login.html 页面,然后将项目部署到 web 服务器,并启动测试运行。
关键代码分析及实现。
具体代码见项目中 login.html。

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

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

相关文章

Nacos集群版本升级2.2.3

官方传送 官方文档传送门 记录日期 2023-06-28 背景简介 当前Nacos版本为2.1.0&#xff0c;集群部署与官方文档一致&#xff0c;通过阿里云负载均衡SLB服务挂载3台ECS提供服务&#xff0c;如图&#xff1a; 近期有漏洞Nacos 内网集群Raft 反序列化漏洞披露。 影响版本 …

leecode-寻找重复数字

题目 题目 分析 哇哦&#xff0c;原来vector可以这样初始化&#xff0c;学到了&#xff01;&#xff01; 不初始化会直接报错嘞&#xff01; 代码 class Solution { public:int findDuplicate(vector<int>& nums) {vector<bool> v(nums.size(),false);//…

解决vue3+vite项目中引入mockjs失败的问题--无法找到模块“mockjs”的声明文件

看到上面报错&#xff0c;根据提示 修改声明方式 declare module mockjs 我们修改一下引入的声明&#xff0c;发现修改之后仍然报错&#xff1b; 解决方法&#xff1a; 需要在vite-env.d.ts文件中&#xff0c;添加 declare module mockjs&#xff0c;保存即可 然后就可以正常使…

CI/CD持续测试的未来...

如果您想知道为什么持续测试如此重要&#xff0c;请考虑以下几点&#xff1a;在过去&#xff0c;软件测试通常是在编写代码并发送给 QA 部门进行独立测试之后进行的。当发现错误时&#xff0c;代码将返回给开发人员进行更正。虽然这种测试方法有效&#xff0c;但非常耗时。如今…

Java的||或者是什么意思?

1.|| a||b 短路或 ab 全为 false 时&#xff0c;计算结果为 false&#xff0c;否则为 true。 2<1||3>4 false 具体解释就是&#xff1a;||表示或&#xff0c;只要有一个为true&#xff0c;结果就为true&#xff0c;两个为false结果才为false 2.&& a&&b 短…

【算法题】动态规划基础阶段之三步问题、 连续数列、按摩师

动态规划基础阶段 前言一、三步问题1.1、思路1.2、代码实现 二、 连续数列2.1、思路2.2、代码实现 三、按摩师3.1、思路3.2、代码实现 总结 前言 动态规划&#xff08;Dynamic Programming&#xff0c;简称 DP&#xff09;是一种解决多阶段决策过程最优化问题的方法。它是一种…

python spider 爬虫 之 scrapy框架 企业级

Scrapy定义 它是一个为了爬取网站的数据&#xff0c;提取结构性数据而编写的应用框架。可以应用在包括数据挖掘信息处理或存储历史数据等一系列的程序中 Scrapy 安装 pip install scrapy 安装过程中可能出现的错误&#xff1a; 报错1&#xff1a;building ‘twisted.test.r…

如何将银行卡拍照转为excel?

如果您手头上有很多的银行卡&#xff0c;并且需要录入到电脑&#xff0c;怎么办&#xff1f;手工一张一张、一个数字一个数字地敲键盘打字&#xff1f;太麻烦了&#xff0c;效率低&#xff0c;而且银行卡上的卡号数字可不短&#xff0c;传统的人工打字录入很容易出错&#xff0…

基于模糊控制算法的水位控制研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Qt 动态手势识别“手掌随动”+“握拳选择”

系列文章目录 通过Qt实现手势识别控制软件操作相关系列技术方案 &#xff08;一&#xff09;Qt 将某控件、图案绘制在最前面的方法&#xff0c;通过QGraphicsScene模块实现 &#xff08;二&#xff09;Qt QGraphicsScene模块实现圆点绘制在所有窗体的最前方&#xff0c;实现圆…

leetcode583. 两个字符串的删除操作(java-动态规划)

两个字符串的删除操作 leetcode583. 两个字符串的删除操作题目描述解题思路解法一 递归加缓存动态规划代码演示 动态规划专题 leetcode583. 两个字符串的删除操作 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/delete-…

算法基础修炼

算法基础 数据结构与算法 字符串匹配 KMP算法&#xff1a; 字符串算法之KMP&#xff08;字符串匹配&#xff09;kmp字符串匹配算法青萍之末的博客-CSDN博客 各大排序算法&#xff1a; 冒泡排序&#xff1a; 选择排序&#xff1a; 类似于冒泡算法&#xff0c;不断找到乱…

Android 编译Android7.0版本源码

编译Android7.0版本源码 前言正文一、前置条件二、编译准备三、下载编译源码1. 下载Repo2. 初始化仓库3. 同步远程代码4. 编译源码5. 启动模拟器 四、编译中的问题① Jack-Server② 本地化设置③ Communication error with Jack server (35), try jack-diagnose or see Jack se…

Pycharm中运行Allure报错不是内部或外部命令的解决方案

问题现象&#xff1a; Allure已安装并配置好系统环境变量&#xff1a; 1、Allure的下载地址&#xff1a;https://github.com/allure-framework/allure2/releases 2、下载后解压&#xff0c;将解压后的bin路径配置到环境变量中&#xff1a; allure-pytest插件也已安装好&#x…

Thinkphp5分页后携带参数进行跳转传递

问题&#xff1a; 我在tp框架中写了一个图书详情分页的&#xff0c;代码如下&#xff1a; public function verify_details(){$sell_order_numinput(sell_order_num);$resDB::table(verif)->where(["sell_order_num">$sell_order_num])->paginate(10);// 模…

Linux上安装matlab

首先需要下载文件&#xff0c;微人大正版软件下载里有 然后直接点击&#xff0c;就可以就可以安装&#xff0c;不需要使用挂载命令&#xff0c;然后使用 ./install就可以进行安装了&#xff0c;这里记住是得登录自己的人大邮箱&#xff0c;否则无法激活&#xff0c;然后修改安…

LINUX7下安装kaldi实战

LINUX7下安装kaldi实战&#xff0c;需要升级gcc版本。还需要将kaldi相关的github.com替换为kgithub.com。 1 升级安装gcc过程 我是在LINUX7.5下安装部署得kaldi。自带的gcc版本为4.8.5&#xff0c;所以需要安装升级gcc. 1.1 安装说明 gcc库包含3个依赖库&#xff1a;gmp、m…

【各种乐器波形图】笛子、二胡、钢琴、号角等乐器波形图研究

标题&#xff1a;不同乐器波形图 笛子的频率取决于其音高&#xff0c;不同音高的笛子频率也不同。以C调笛子为例&#xff0c;其最基本的频率为261.63 Hz&#xff08;即中央C的频率&#xff09;。而其他调号的笛子的基本频率则会有所不同。 笛子的波形图&#xff1a; import n…

有奖问卷 | 2023 中国软件研发效能调查问卷即将截止

中国信通院将根据问卷征集和企业调研结果&#xff0c;与业内专家共同撰写**《2023 中国软件研发效能调查报告》**&#xff0c;研判发展趋势&#xff0c;提供研发效能体系建设建议&#xff0c;并于 2023 年 7 月 7 日正式发布调查报告解读。 随着云计算应用的不断深入&#xff0…

微信小程序中使用echart、动态加载几条折线

一、示例 echart小程序示例 gitub地址&#xff1a;GitHub - ecomfe/echarts-for-weixin: Apache ECharts 的微信小程序版本 在小程序中放入 效果 二、 小程序代码 json 组件的位置取决于一示例中的的echart的位置 { "navigationStyle":"custom","…