首页 > 其他分享 >【Shiro】12.自定义过滤器

【Shiro】12.自定义过滤器

时间:2024-10-24 08:50:40浏览次数:8  
标签:12 请求 自定义 AccessControlFilter servletResponse 过滤器 servletRequest Shiro

通过查看若依源码(ruoyi-framework)下的过滤器文件(src.main.java.com.ruoyi.framework.config.ShiroConfig)可以发现设置了过滤器。

过滤器(Filter)是Java Servlet技术中的一个重要部分,主要用于在 Servlet 处理请求之前或响应之后对数据进行某些处理。

可以这么理解。如果类比到生活的场景中:请求响应之前处理——我们日常饮用水会先用净水器处理;请求响应之后:工厂排出的污水,会先处理,再排放。

简单的理解,可以接口用户的响应判断用户是否在线;可以在登录验证前,验证验证码是否正确。

那么在Shiro中如何自定义过滤器呢?

前提条件

已新建SpringBoot项目

项目以成功集成shiro,并完成简单配置

已完成路由配置,包含登录页面/login和首页index

简单的过滤器

根据ruoyi源码,我们完成一个登录时的一个自定义过滤器。

1.拦截过滤器添过滤器。

 2. 自定义过滤方法,过滤方法中引用过滤器。

1 /**
2  * 自定义过滤方法
3  * @return
4  */
5 private Filter myFliter() {
6     MyFliter myFliter = new MyFliter();
7     return myFliter;
8 }

3. 自定义过滤器,实现结果Fliter

1 public class MyFliter implements Filter {
2     private static  int i = 0;
3     @Override
4     public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
5         System.out.println("自定义过滤器使用" + i++);
6         filterChain.doFilter(servletRequest, servletResponse);      // 放行到下一个过滤器
7     }
8 }

此时,进入login页面前,会执行doFliter方法

 进入index页面,则不执行自定义过滤器的doFilter方法。

 实现fliter的方法,代码看起来阅读性相对没那么友好。  filterChain.doFilter(servletRequest, servletResponse); 代码前表示请求接口前操作,代码后表示调用接口后需要执行的代码。

 

继承AccessControlFilter

不过,继承AccessControlFilter。实现它的抽象方法。查看关系,可以知道AccessControlFilter的祖先,也是有Filter的。

 

AccessControlFilter是 Apache Shiro 框架中的一个抽象类,用于控制对资源的访问。它提供了两个主要方法:isAccessAllowedonAccessDenied,允许你自定义访问控制逻辑。
主要方法 说明 参数 参数说明
isAccessAllowed 访问资源之前确定是否允许访问。如果返回true,则允许访问,继续进行;如果放回false,则会调用onAccessDenied方法 servletRequest 传入的请求
servletResponse 响应对象
mappedValue 通常是与当前请求路径相关联的配置值,可以用于确定访问控制策略
onAccessDenied isAccessAllowed方法返回false时,此方法被调用。在这里可以实现访问被拒绝时的处理 servletRequest 传入的请求
servletResponse 响应对象
mappedValue 通常是与当前请求路径相关联的配置值,可以用于确定访问控制策略
过滤器例子
 1 public class MyFliter2 extends AccessControlFilter {
 2 
 3     @Override
 4     protected boolean isAccessAllowed(ServletRequest servletRequest, ServletResponse response, Object mappedValue) throws Exception {
 5         HttpServletRequest request = (HttpServletRequest) servletRequest;
 6         // 假设检查请求头中是否存在特定的令牌来决定是否允许访问
 7         String token = request.getHeader("Authorization");
 8         return token!= null && token.startsWith("Bearer ");
 9     }
10 
11     @Override
12     protected boolean onAccessDenied(ServletRequest request, ServletResponse servletResponse) throws Exception {
13         HttpServletResponse response = (HttpServletResponse) servletResponse;
14         response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Access denied.");
15         return false;
16     }
17 }
 

标签:12,请求,自定义,AccessControlFilter,servletResponse,过滤器,servletRequest,Shiro
From: https://www.cnblogs.com/luyj00436/p/18496659

相关文章

  • 《使用Gin框架构建分布式应用》阅读笔记:p127-p142
    《用Gin框架构建分布式应用》学习第9天,p127-p142总结,总计16页。一、技术总结1.Authentication方式汇总(1)APIkeysAPIkeys认证方式示例:func(handler*RecipesHandler)NewRecipeHandler(c*gin.Context){ //API-keys认证 value:=os.Getenv("X-API-KEY") log.Print......
  • Nginx根据返回的错误码,自定义错误页面回显
    在/data/nginx/html/uhn目录下创建一个error.html[root@localhost~]#echo"errorpage">/data/nginx/html/uhn/error.html然后修改配置文件,将 500502503504404的错误页面指向/error.html页面[root@localhost~]#cdweb[[email protected]]#viuhn.confserver......
  • P7912 [CSP-J 2021] 小熊的果篮 题解
    是模拟吗?其实是的,虽然$1\len\le2\times10^5$,但是队列是个好东西.我们定义一个结构体,来存放每一个块的信息,包括类型、起点、终点,将它们放入队列当中,再使用基于广搜的思想,先处理,再合并,所以需要用到$2$个队列.注意点数据中可能会有块的类型全是$1$,或者全是$0$的情况......
  • 12306抢票-python
    写了一整天,代码设置起始站,终点站,出行日期,通过爬虫从12306爬取选择当日的车票信息,保存在csv文件中,随后通过邮箱将包含车次信息的csv文件发送到个人邮箱账号,个人阅读后回发一个邮件,期间包含车次信息,电脑进入邮箱读取邮件,获得所选车次,进行自动化订票,期间需要输入一次验证码,目前是......
  • Spring Cloud --- Gateway自定义全局过滤器
    Gateway自定义全局过滤器介绍全局过滤器对所有路由生效。新建类MyGlobalFilter并实现GlobalFilter,Ordered两个接口自定义接口调用耗时统计的全局过滤器@Component@Slf4jpublicclassMyGlobalFilterimplementsGlobalFilter,Ordered{publicstaticfinalS......
  • 蓝桥杯EDA赛道经验分享(一)&12、13、14届省赛客观题知识点
    一、经验分享1.文件提取离线模式——>文件——>(大压缩包)导入专业版——>导入文件;(小压缩包)提取库文件。2.布线规则先根据参赛文件改布线规则(间距,线宽)。3.PCBlayout注意事项(1)避免重叠:确保元件间无物理重叠,为布线留出足够空间。(2)元件放置:大功率元件及发热元件应分散布局......
  • vTESTstudio系列14--vTESTstudio中自定义函数介绍1
    在上篇vTESTstudio系列的文章中,我们基于osek_tp.dll实现了诊断的发送和回复的最基本的脚本,但是我们可以看出来,这样的脚本是不具有普适性的,为了生成一个普适性的诊断请求回复的函数,接下来本系列的几篇文章会开始介绍一些优自定义的小函数,Let'sGo!!!目录1.自定义函数:1.1字符......
  • P11218 【MX-S4-T2】「yyOI R2」youyou 不喜欢夏天
    算法博弈类型的题这个题属于最优解法的问题最初可以看出\(\rm{yy}\)交换的列一定是一黑一白的,不然无意义考虑\(\rm{youyou}\)怎么选对于两个都是黑的情况,显然是都要选的,这种贡献yy影响不了对于两个都是白的情况,显然是只选一个,最大化贡献对于一白一黑的情况......
  • Oracle 12C 一步一步安装大全避免踩坑(精华)
    Centos7安装oracle12c杂记参考https://blog.csdn.net/liu918458630/article/details/107531253https://blog.51cto.com/gblfy/5656598在CentOS7上挂载光盘并配置YUM源通常是为了在没有互联网连接的情况下安装软件包。以下是步骤:步骤1:挂载光盘首先,你需要将C......
  • PCIe宽带中频采集回放平台3GS/s 采集14bit 2通道 12.6GS/s回放 16bit 2通道
    PCIe宽带中频采集回放平台3GS/s采集14bit2通道12.6GS/s回放16bit2通道,是一款具备交流耦合和双极性宽带信号输入的高速数据采集卡,它具有2通道,14bit,3GS/s采集和2通道,16bit,12.6GS/s回放特性。板载FPGA具备实时信号处理能力,可实现数字下变频DDC、数字滤波、快速傅立叶变换等......