SpringBoot Filter使用

news2025/4/15 14:43:34

filter就是其他框架中的中间件,在SpringBoot启动时有很多默认加载的Filter 例如:

  • characterEncodingFilter
  • hiddenHttpMethodFilter
  • httpPutFormContentFilter
  • requestContextFilter

Filter存在一个优先级, 数值越小越靠前
这有两个常量用来表顺顺序 Ordered.HIGHEST_PRECEDENCE Ordered.LOWEST_PRECEDENCE

低位值意味着更高的优先级 Higher values are interpreted as lower priority,自定义Filter,避免和默认的Filter优先级一样,不然会冲突

还可以注册Filterbean FilterRegistrationBean

自定义Filter

1)使用Servlet3.0的注解进行配置
2)启动类里面增加 @ServletComponentScan,进行扫描
3)新建一个Filter类,implements Filter,并实现对应的接口
4) @WebFilter 标记一个类为filter,被spring进行扫描
urlPatterns:拦截规则,支持正则
5)控制chain.doFilter的方法的调用,来实现是否通过放行不放行,web应用res.sendRedirect("/index.html"); 进行跳转
场景:权限控制、用户登录等

编写Filter

在启动类文件里面增加注解

@ServletComponentScan
  • LoginFilter
package com.example.demo.filter;


import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * urlPatterns 正则匹配路由
 * filterName  过滤器名称
 */
@WebFilter(urlPatterns = "/api/*", filterName = "loginFilter")
@Order(value = 1)
public class LoginFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("初始化操作");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        // 有学过其他框架的同志 这个就是中间件 在这里做鉴权、日志等操作
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;

        String username = req.getParameter("username");

        if ("aoppp".equals(username)) {
            // 如果登录名称 确认就通过
            System.out.println("验证通过" + username);
            chain.doFilter(request, response);
        } else {
            // 否则跳转到首页
            res.sendRedirect("/error/403.html"); // 跳转到static/error/403.html
        }

    }

    @Override
    public void destroy() {
        System.out.println("销毁时触发,一般热更新可以明确看到");
    }
}
  • static/error/403.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<h1>403</h1>
</body>
</html>
  • ApiController
@RequestMapping("/api/v1/login")
    public Object login(HttpServletRequest request) {
        Map<String, String> map = new HashMap<>();
        map.put("username", request.getParameter("username"));
        return map;
    }

效果

在这里插入图片描述
参考:憧憬在 aoppp.com发布

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

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

相关文章

webpack处理样式资源(css less sass scss)

Webpack 本身是不能识别样式资源的&#xff0c;所以我们需要借助 Loader 来帮助 Webpack 解析样式资源 一、处理css样式资源 去项目根目录新建css文件夹&#xff0c;在css文件夹下新增index.css文件&#xff0c;内容如图&#xff1a; 在src-main.js中引入css->index.css文…

各个AI模型写2023年广东高考作文大比拼

今天是一年一度的高考开始的日子&#xff0c;寒窗苦读十二年&#xff0c;剑指今朝。 作为过来人&#xff0c;当年的高考场景还历历在目。这里先预祝各位莘莘学子&#xff0c;高考正常发挥&#xff0c;旗开得胜&#xff0c;马到功成&#xff0c;考上心中理想的大学。 今天早上是…

《精通特征工程》学习笔记(3):特征缩放的效果-从词袋到tf-idf

1.TF-IDF原理 tf-idf 是在词袋方法基础上的一种简单扩展&#xff0c;它表示词频 - 逆文档频率。tf-idf 计算的不是数据集中每个单词在每个文档中的原本计数&#xff0c;而是一个归一化的计数&#xff0c;其中每个单词的计数要除以这个单词出现在其中的文档数量。 词袋bow(w, …

面向对象的特征三:多态性

1.多态性的理解&#xff1a; 可以理解为一个事物的多种形态。 2.何为多态性&#xff1a; 对象的多态性&#xff1a;父类的引用指向子类的对象&#xff08;或子类的对象赋给父类的引用&#xff09; 可以直接应用在抽象类和接口上 举例&#xff1a;Person p new Man(); O…

场景营销解密:出海品牌在全球市场的差异化策略

品牌出海是企业扩大国际市场份额、实现全球化发展的必经之路。然而&#xff0c;面对激烈的全球竞争和多样化的消费者需求&#xff0c;仅仅依靠传统的广告宣传手段已经无法满足品牌推广的需求。而场景营销则通过创造具有情境感的消费体验&#xff0c;更好地满足了消费者的参与需…

手写分布式事务的一种回滚方案。

1&#xff1a;项目架构 我一个朋友的公司基于实际业务的考虑&#xff0c;选择了多个单体项目来组建成一个分布式系统。&#xff08;对于目前来说分布式的系统最好采用微服务的架构来实现项目搭建。但基于许多客户只能采用内网的使用&#xff0c;微服务反而会影响项目的复杂度&a…

STM32ADC学习(一)

ADC 模拟/数字转换器 常见ADC类型 并联比较型工作示意图 ADC的特性参数 分辨率&#xff1a;ADC能辨别的最小模拟量&#xff0c;用二进制位数来表示。例如3.3V&#xff0c;12位&#xff0c;能辨别的最小模拟量就是&#xff1a;&#xff08;3.3/4096&#xff09;转换时间&#x…

【面试题HTTP中的两种请求方法】GET 和 POST 有什么区别?

GET 和 POST 有什么区别&#xff1f; 1.相同点和最本质的区别1.1 相同点1.2 最本质的区别 2.非本质区别2.1 缓存不同2.2 参数长度限制不同2.3 回退和刷新不同2.4 历史记录不同2.5 书签不同 总结代码示例 GET 和 POST 是 HTTP 请求中最常用的两种请求方法&#xff0c;在日常开发…

练手必备,20个Python实战项目含源代码

“读”代码是不能给你带来任何收益的&#xff0c;正如“读书”一样&#xff0c;如果在读的时候你不琢磨&#xff0c;保管你读完仨月准忘了一大半。真正需要的是去“试”代码&#xff0c;动手去调调代码&#xff0c;改改这改改那&#xff0c;看看把A变成B这个代码的结果会有什么…

c#使用RSA公钥解密

文章目录 前言一、解密函数1、上代码&#xff01;2、传入的字符串不是base64格式 二、在线验证总结 前言 新项目对接第三方&#xff0c;会把用户信息反正url里面rsa加密传过来&#xff0c;拿到后我解密出用户数据&#xff0c;只给了一个公钥&#xff0c;他们用的java、我用的c…

SpringBoot生成RESTful API文档

由于我一开始学习的SpringBoot是3以上版本&#xff0c;所以我这里用到的也是支持和SpringBoot3能够整合的SpringDoc 这里先说一下&#xff0c;其实SpringDoc就是Swagger3版本&#xff0c;我一开始整合的2版本&#xff0c;比较麻烦况且最后SpringBoot程序都启动不了了&#xff0…

怎样书写专业的落地性能测试计划?

目录 引言 什么是性能测试计划 性能测试计划包含的内容 背景 性能目标 压测范围 启停准则 性能指标 系统架构图 压测前准备 工具准备 数据准备 性能设计 监控设计 项目组织架构 成果输出 项目风险分析 引言 测试计划是软件测试流程中的一个重要步骤&#xff0c;它涉及到对软件…

面向教育行业的MDM(移动设备管理)解决方案

什么是面向教育的MDM 学校和教育机构的移动设备管理 &#xff08;MDM&#xff09; 通过将智能设备配置为适合教育用途&#xff0c;支持通过这些设备进行学习。面向教育的 MDM 解决方案允许组织的 IT 管理员或教学人员管理有助于学习的设备&#xff0c;如智能手机、平板电脑、笔…

十三、输出多个立方体并深度测试

第一部分概念 1&#xff09;由来&#xff1a; 深度测试&#xff1a;opengl的深度测试是指在片段着色器执行之后&#xff0c;利用深度缓冲所保存的深度值决定当前片段是否被丢弃的过程。 深度缓冲区和颜色缓冲区是差不多的&#xff0c;有相同的宽高度&#xff0c;并且一般在窗…

实验篇(7.2) 06. 通过安全隧道访问远端内网服务器 (FortiClient-SSL) ❀ 远程访问

【简介】直接映射服务器到公网&#xff0c;没有验证不安全&#xff1b;通过Web浏览器访问远程内网服务器&#xff0c;有验证也安全&#xff0c;但是支持的协议太少。那有没有即安全&#xff0c;又能支持所有协议的访问方法呢&#xff1f;我们来看看SSL VPN的隧道模式。 实验要求…

智能动环监控系统,实时排查机房安全隐患

动环监控系统又称机房动环、机房动力环境监控系统、动环监控等&#xff0c; 是指对各机房的动力、环境、安防进行集中监测。可对监控系统、设备、安全运行状态进行实时监测、通过统计和处理相关数据&#xff0c;及早发现故障&#xff0c;及时通知运维人员处理&#xff1b;实现机…

员工工作服穿戴AI识别算法 yolov5

员工工作服穿戴AI识别算法是基于yolov5python网络模型人工智能技术&#xff0c;员工工作服穿戴AI识别算法对现场人员的工作服穿戴情况进行实时监控&#xff0c;并对违规情况将自动发出警报。我们选择当下YOLO卷积神经网络YOLOv5来进行火焰识别检测。现版本的YOLOv5每个图像的推…

高并发下缓存失效问题(穿透、雪崩、击穿),以及本地锁、Redis分布锁、Redisson锁、SpringCache使用

高并发下缓存失效问题-穿透、雪崩、击穿 1.缓存穿透2.缓存雪崩3.缓存穿透4.加锁4.1 本地锁4.2 Redis分布锁4.3 RedLock 分布式锁-Redisson**4.3.1 整合Redisson实现分布式锁**4.3.2 分布式锁 1&#xff09;分布式锁 - - 可重入锁 2&#xff09;分布式锁 - - 公平锁 3&#xff0…

Spring面试题(基础篇)

目录 一、Spring框架概述 1、什么是Spring&#xff1f; 2、spring优点有哪些&#xff1f; 二、IOC与DI 3、你知道getBean方法的有几种重载方式吗&#xff1f; 4、Spring有几种依赖注入方式&#xff1f; 三、Spring创建对象 5、Spring创建对象有几种方式&#xff1f; 6…

SciencePub学术 | 可再生能源类重点SCIEI征稿中

SciencePub学术刊源推荐: 可再生能源类重点SCI&EI征稿中&#xff01;2区闭源正刊&#xff0c;进展顺利&#xff0c;稳定检索40年以上。信息如下&#xff0c;录满为止&#xff1a; 一、期刊概况&#xff1a; 可再生能源类重点SCI&EI 【期刊简介】IF&#xff1a;4.0-4.…