Shiro源码学习(二)应用拦截器链

接口统一参数打印--OncePerRequestFilter 为了保证所有接口访问记录可控可查,目前需要将所有核心系统的接口、后门jsp等做访问日志打印,因此使用到了 Spring 中一种特殊类型的 Filter(过滤器)OncePerRequestFilter。 阅读详情

将配置的拦截器链加入到FilterChain中

我们可能会在shiro中配置上图这样的拦截器链,但是像Tomcat这样的服务器中的Filter都是需要配置在web.xml中才会生效。而在上篇文章中,我们在web.xml中只配置了一个Filter,所以Shiro需要做的就是把配置的拦截器链“嫁接”到服务器原来的Filter链中。

在上篇中,我们提到,最后发挥拦截功能的是SpringShiroFilter这个拦截器,所以也从它开始分析

SpringShiroFilter的继承体系


其中OncePerRequestFilter对Filter接口的doFilter方法进行了重载:

	//从类的名字可以看出,该Filter对一次请求只会应用一次拦截
    public final void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
            throws ServletException, IOException {
        String alreadyFilteredAttributeName = getAlreadyFilteredAttributeName();
        if ( request.getAttribute(alreadyFilteredAttributeName) != null ) {
            log.trace("Filter '{}' already executed.  Proceeding without invoking this filter.", getName());
            filterChain.doFilter(request, response);
        } else //noinspection deprecation
            if (/* added in 1.2: */ !isEnabled(request, response) ||		//isEnabled方法默认返回true,shouldNotFilter默认返回false
                /* retain backwards compatibility: */ shouldNotFilter(request) ) {
            log.debug("Filter '{}' is not enabled for the current request.  Proceeding without invoking this filter.",
                    getName());
            filterChain.doFilter(request, response);
        } else {
			//将当前Filter的name添加到Request的属性中,在上面第一、二行代码中可以看到,如果请求再次遇到该Filter不会出现二次拦截
            request.setAttribute(alreadyFilteredAttributeName, Boolean.TRUE);	

           
java日志框架总结(七、使用过滤器自动打印接口入参、出参) 回顾一下Filter的工作原理。Filter可以在Servlet执行之前或之后调用。当请求被调度给一个Servlet时,可能会将其转发给另一个Servlet。另一个Servlet也有可能使用相同的Filter。在这种情况下,同一个Filter会被调用多次。但是,有时需要确保每个请求只调用一次特定的 Filter。一个常见的用例是在使用时。当请求通过过滤器链(Filter Chain)时,对请求的身份证认证应该只执行一次。在这种情况下,可以继承。Spring 保证只对指定请求执行一次。 阅读详情

相关推荐

Shiro源码学习(三)常用Filter源码和继承关系

Filter类别Shiro为我们提供了默认的几种拦截器,并且也支持我们通过继承来编写我们自定义的拦截器。Shiro中默认的拦截器有:其含义如下:anon:例子/admins/**=anon 没有参数,表示可以匿名使用。 authc:例如/admins/user/**=authc表示需要认证(登录)才能使用,没有参数 roles:例子/admins/user/**=roles[admin],参数可以...

finalcola的博客 2133

Java安全框架Shiro:认证授权与会话管理详解

Java安全框架是构建企业级应用的重要基础设施,负责处理认证、授权等核心安全功能。Apache Shiro作为轻量级安全框架,通过分层架构设计实现了认证授权、会话管理和加密等模块的解耦。其核心价值在于提供简单一致的API,支持从Web应用到命令行工具的各种部署环境。在认证方面,Shiro采用Realm作为数据源适配层,支持多因素认证策略;授权机制则提供基于角色和权限的细粒度访问控制。典型应用场景包括Spring Boot集成、分布式会话管理以及微服务安全网关等。本文以Shiro框架为例,深入解析其认证流程源

weixin_30500473的博客 316

从PHY芯片看工业网络精准时钟:IEEE 1588v2(PTP)协议实现与选型指南

本文深入解析了工业网络中IEEE 1588v2(PTP)协议的实现与PHY芯片选型要点。通过对比KG7101、RTL8211F等芯片的关键参数,揭示硬件时间戳对纳秒级时钟同步的决定性作用,并提供PTP网络设计中的拓扑布局与配置优化技巧,助力工业自动化场景实现精准时间同步。

weixin_42628688的博客 501

《Hadoop大数据技术原理与应用》(第2版)黑马程序员的课后习题答案

《Hadoop大数据技术原理与应用》(第2版)黑马程序员的课后习题答案

qq_36773158的博客 4646

不用Root!这些隐藏代码能一键开启安卓诊断端口(小米/OPPO/魅族机型实测)

本文提供了一份无需Root权限即可开启安卓手机诊断端口的实用指南。通过拨号盘输入特定隐藏代码,小米、OPPO、魅族等机型的用户可以一键激活此工程模式,从而连接电脑进行基带数据备份(如QCN文件)或故障排查。文章详细列出了各品牌指令、操作验证步骤,并强调了备份IMEI等关键数据的重要性与操作风险,旨在帮助用户在紧急情况下修复网络问题。

weixin_29260291的博客 273

SOLIDWORKS2024安装卡顿?Edge WebView2 Runtime冲突的排查与修复

本文针对SOLIDWORKS 2024安装时setup.exe无响应或卡死的常见问题,深入剖析了其根本原因在于Microsoft Edge WebView2 Runtime的版本冲突或组件损坏。文章提供了三种经过验证的解决方案:一是通过运行安装包内swwi\data目录下的setup.exe直接绕过图形界面;二是彻底卸载并重装官方Edge WebView2 Runtime组件;三是进行系统级修复与排查。旨在帮助用户快速定位并解决安装障碍,顺利完成软件部署。

4k5l6j7h8的博客 289

本科双非的计算机考研择校注意点——经验贴

一战一志愿上岸某211的电子信息专硕。之前在某乎也发过帖子。但现在用优快云,所以把相关的心得再发出来仅供大家参考。 首先,我认为最重要的是你为什么要考研? 不管你是为了混一个文凭将来好进大厂,还是为了真正搞学术或者学知识,你要知道你自己的目标,只有坚定自己的目标,才有动力去走完这段复习的历程。真正的考研,是很苦的。如果你是为了逃避大四面临的就业才选择考研,并且还浑浑噩噩不当回事,那我劝你放弃,不如踏踏实实学点技术去找实习。那从我自己出发,我是认为自己本科双非院校且自己四年间没有学到什么专业方面的技能,

m0_56698268的博客 3164

AI工程化之生成式UI & A2UI(二)

本文介绍了生成式UI框架A2UI的架构设计与核心实现。项目采用AI协作开发模式,通过ATDD(AI驱动的测试驱动开发)确保代码质量。前端SDK基于zustand实现框架无关的状态管理,包含协议解析器、存储管理、渲染器等核心模块。重点展示了基础store构建、A2UI协议解析器的实现过程,包括mock数据准备、测试用例生成和可视化调试。项目采用monorepo管理,利用vite实现高效开发构建。整个系统设计遵循模块化原则,通过清晰的接口定义实现各组件解耦,为后续功能扩展打下基础。

qq_34306228的博客 406

【2026华为OD新规机考】最新套题持续更新【完全原创题解 | 详细考点分类 | 不断更新题目 | 六种主流语言Py+Java+Cpp+C+Js+Go】

可上练习华子OD、大厂真题绿色聊天软件戳od1441了解算法冲刺训练(备注【优快云】否则不通过)

weixin_48157259的博客 506

vue2/3 - element表格组件el-table实现懒加载树型(上下级)数据、默认展开和隐藏层级,支持对表格进行修改|新增|删除,解决完成操作后树节点不刷新问题(提供示例代码,一键复制开箱即用

vue2,vue3,elementui,elementPlus,el-table,Table表格组件,表格懒加载数据,element table表格数中的树形结构懒加载,增加后数据不同步更新问题,el-table树形与el-tree树形结构的一键折叠与展开,elementui中el-tree懒加载数据 默认展开最外层节点,Element-plus Table组件树表结构默认展开一级目录,vue实现element table表格树形结构-使用懒加载时-解决子节点增删改后,不刷新子节点数据问题,解决el-tre

✅ 精选推荐文章 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

上一篇: Shiro源码学习(一)Filter的创建
下一篇: Shiro源码学习(三)常用Filter源码和继承关系
finalcola
博客等级 码龄9年 37粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值