SpringBoot--Filter过滤器(一)

news2025/2/27 17:30:05

一.了解过滤器Filter

  • 过滤器: Filter, 是 Servlet 技术中最实用的技术。
  • 过滤器是处于客户端和服务器之间的一个过滤网,可以过滤掉一些不符合要求的请求
  • 常见场景: 
    • Session 校验
    • 判断用户权限
    • 不符合设定条件,则会被重定向特殊的地址或者设定的响应
    • 过滤敏感词汇
    • 设置编码

二.基础入门代码编写

第一步:引入SpringBoot基础依赖即可

第二步:创建自己的过滤器

  • note:实现 Filter接口,并重写它的三个方法
    • init -- filter对象在服务器启动时就会自动创建

    • doFilter -- 每次有拦截到请求时都会调用,可以调用多次;

    • destroy -- filter对象在服务器关闭/应用移除时销毁

/**
 * @Classname MyFilter
 * @Description 过滤器
 * @Date 2022/3/6 21:47
 * @Created ben
 */
@Component
@WebFilter(filterName = "MyFilter",
        /**
         * 通配符(*)表示对所有的web资源进行拦截
        */
        urlPatterns = "/*"
        )
public class MyFilter implements Filter {
    /**
     * 过滤器初始化
     * explain:在容器中创建当前过滤器的时候自动调用
     *
     * @param filterConfig
     */
    @Override
    public void init(FilterConfig filterConfig){
        System.out.println("初始化过滤器!");
    }

    /**
     * 过滤器过滤操作
     * explain:过滤的具体操作
     * @param servletRequest
     * @param servletResponse
     * @param filterChain
     * @throws IOException
     * @throws ServletException
     */
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        System.out.println("请求地址:"+request.getRequestURI());

        HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper((HttpServletResponse) servletResponse);

        // 请求url中包含/hello||/online,继续执行
        if (request.getRequestURI().contains("/hello")
                || request.getRequestURI().contains("/online") ){
            // 交给下一个过滤器或servlet处理
            filterChain.doFilter(servletRequest,servletResponse);
        }else {
            // 请求url不包含/hello||/online,重定向到/online接口
            wrapper.sendRedirect("/entry/online");
        }
    }

    /**
     * 过滤器销毁
     * explain:在容器中销毁当前过滤器的时候自动调用
     */
    @Override
    public void destroy() {
        System.out.println("销毁过滤器!");
    }
}

第三步:测试

  • 启动服务

    • note:可以看见过滤器中init 方法,在服务启动的时候被调用到,说明服务器启动,容器也接着被创建

  • 测试一:127.0.0.1/entry/hello
    • note:访问的url在过滤器中存在,则继续交给了下一个过滤器或servlet处理

  • 测试二:127.0.0.1/entry 
    • note:访问的url在过滤器中不存在,则会经过特殊处理
    • note:注意访问url的变化,从/entry重定向到了/entry/online

​ 

 

三.配置

  • 注解配置

  • 拦截路径

1、完全路径匹配:以/开始,以具体路径结尾
	/aa   /aa.do  /aa/bb/xx
	
2、目录匹配:以/开始,以*结尾
	/* /aa/*  /aa/bb/*
	
3、扩展名匹配:以*开始,以扩展名结尾
	*.do   *.action
	
****以上三种路径写法都是指拦截路径,一个资源访问是可以同时被多个过滤器拦截的,所以是没有优先级
  • 拦截方式

    • note:默认只拦截 从浏览器端过来的正常request,转发是默认不拦截,如果希望拦截到转发的资源跳转,需要通过配置
    • dispatcherTypes:不配置,默认过滤所有方式的请求

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

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

相关文章

一天撸一个财务APP系统【安卓端+前端+后端】

昨天有个粉丝朋友也想学开发Web和小程序、安卓,问可以在大学学会吗? 在学校学到的东西真的有限: 在很多的高校,有一些教授是学院派的,他们没有做过多少开发工作,上课就是照本宣科,讲的知识点都…

Vue打包优化篇-CDN加速

优化原因 在没有使用cdn加速之前打包后数据如下,可以看出element-ui、vue、vuex、vue-router这些依赖都打进chunk-vendors.js中导致体积很大,假设再来很多依赖项是不是更大,同时也会影响单页面应用首屏加载速度,所以这里采用一种打…

Vue的组件化编程

非单文件组件 注册局部组件 此时上面书写的组件都是局部组件,每一个vue实例要想使用上面的组件时都需要在components中进行注册才可以使用,此时如果再创建一个Vue实例vms,这个实例不在components中注册就直接使用组件会产生什么变化: 此时控制台报错 ‘是否正确注册了组件&a…

function 函数

一、函数的基本注意事项 function函数的名字也是一个标识符,通过关键字function申明一个函数 function 函数名(){ 代码块 } 二、函数基本用法 1、形参与实参 1、形参与实参可以有无数个,实参按照顺序赋值给形参; 2、实参个数不一定要与实…

web前端面试高频考点——Vue原理(理解MVVM模型、深度/监听data变化、监听数组变化、深入了解虚拟DOM)

系列文章目录 内容参考链接Vue基本使用Vue的基本使用(一文掌握Vue最基础的知识点)Vue通信和高级特性Vue组件间的通信及高级特性(多种组件间的通信、自定义v-model、nextTick、插槽)Vue高级特性Vue的高级特性(动态组件…

axios发post请求,后端接收不到参数的原因及解决

做分页数据时,使用vue3 axios发post请求,后端服务调用成功但数据没有根据参数动态变化,换为js ajax也是同样错误。 后来是后端没有接收到参数。 网上看了资料,原因: 使⽤axios请求数据时,我们的 …

Module Federation在vue3中使用vue2的组件

前言: 备注:本文基于对webpack Module Federation有一定了解的情况下 一般情况下使用模块联邦都是会使用相同的版本,如Vue2的组件时在Vue2中使用,但我为什么会在Vue3项目中去使用Vue2的组件呢,其实是因为历史原因。好…

点击《el-table》让选中的行变色,亲测实用

前期回顾 Vue项目实战 —— 哔哩哔哩移动端开发_0.活在风浪里的博客-CSDN博客撑着下班前半小时我用vue写《哔哩哔哩 项目》移动端、新手还在哭、老鸟一直在笑。。。技术选型Vue2,技术栈有axios、Vh等,下班过来敲哈哈https://blog.csdn.net/m0_5790…

vite+vue3+ts 手把手教你创建一个vue3项目

使用vite 创建一个vue3项目,基本全程cv。 安装router,less / scss,pinia,axios, element / Ant Design Vue,Echarts 以及如何配置别名,自定义组件,vue-devtools插件。 目录 1、创建…

vue设置cookie和路由守卫

vue项目中登录页面用户登录成功后,会把用户信息存储到cookie中,然后跳转进入首页,当用户没有登录时,直接输入页面地址会经过路由守卫检测cookie中是否存在用户信息,如果不存在,重定向到登录页让用户进行登录…

使用idea运行VUE项目

1.电脑先安装好node.js并配置好环境变量, 安装方法参考windows mac 2.使用管理员身份运行idea,把项目拉取下来, 并给idea安装vue的插件 安装方法参考链接 3.删除“node_modules”文件夹和“package-lock.json” 将项目里的“node_modules”…

简单的Java web项目代码(8个)

引言:Java web项目主要采用mvc的的设计思想,系统主要采用javajspservletmysqleclipse实现,具有登陆、分页、导出excel,增删改查等功能,适合初学者,满足基本的实训需求,以下是推荐的几款,总有适合…

uniapp及uniCloud开发中经常会出现的问题汇总

一、manifest.json内未配置Appld,请重新获取后再 uniCloud本地调试服务启动失败,错误信息为:manifest.json内未配置Appld,请重新获取后再试 新建uniapp项目会出现以下报错,说明还没有创建APPID。 解决办法: 打开DCloud开发者中心&#xff…

Vite基础配置之 - 分包

Vite基础配置之 - 分包 什么是分包呢?它有什么好处呢? 还是举个例子,来回忆一下吧,什么呢? 比如说,我使用了 loadsh.js 的东西,那么我们在打包的时候,就会把 loadsh 相关资源也会打…

AJAX跨域问题及解决方案

文章目录跨域哪些方式可以进行跨域部署服务器部署模块ajax1ajax2测试跨域解决方案方案1:设置响应头方案2:jsonp深入一下jsonp方案3:代理机制(httpclient)第一种方案:使用JDK内置的API第二种方案&#xff1a…

Vite 打包性能优化

Vite 打包性能优化开始一个 Vite ts 项目分包策略gzip 压缩cdn 加速开始一个 Vite ts 项目 这里我们开始了一个 Vite ts 的项目&#xff0c;其中关于 ts 的配置直接看内容注释即可 npm init -y npm i vite -D npm vite-plugin-checker -D #用来强制提示ts报错<!-- inde…

反射时竟然NoSuchMethodException了!看这篇超详细的解决方案吧

前几天九哥在讲Servlet时&#xff0c;为了灵活地使用同一个Servlet来处理对同一张表的业务操作请求&#xff0c;我给学生讲解了BaseServlet工具类的封装&#xff0c;基本实现思路有如下几个步骤。 一. 反射封装BaseServlet工具类 使用反射封装BaseServlet工具类&#xff0c;无…

uview常用组件案例操作及详解(一) 选择器 picker

uview常用组件案例操作及详解&#xff08;一&#xff09; 选择器 picker 1.图片示例 2.使用方法 *为简便代码不提供样式 <view><view><text>行业性质</text><text>*</text></view><view><text v-if"!text.industry…

echarts中的legend属性

legend: {orient: "vertical",right: "0%",top: "15%",icon: "circle", //小圆点itemWidth: 8,itemHeight: 8,itemGap: 15, //间隔formatter: function (params) {let tip1 "";let tip "";let le params.leng…

【uni-app】swiper的使用

最近在学习小程序的开发&#xff0c;其中有用到swiper&#xff0c;在这里记录一下我的学习历程 有一些人&#xff0c;他刚开始并不会开发小程序&#xff0c;但是在任务面前&#xff0c;没有什么是不可以学的… 刚开始接触到swiper的时候&#xff0c;是在uni-app的官方文档里&am…