专栏首页求道SpringBoot过滤器的简单使用

SpringBoot过滤器的简单使用

SpringBoot过滤器的简单使用

Filter是Servlet的加强版,能够在请求前后进行处理!可以使请求在执行资源前预先处理数据,也可以在处理资源后进行处理!

一、SpringBoot使用Servlet Filter

filter是依赖于Servlet容器的,所以在SpringBoot使用Filter的时候也需要实现javax.servlet.Filter

二、项目演示

pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.filter</groupId>
    <artifactId>test-filter</artifactId>
    <version>1.0-SNAPSHOT</version>



    <!-- Inherit defaults from Spring Boot -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.8.RELEASE</version>
    </parent>


    <dependencies>
        <!--springboot-web启动-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--springboot aop支持-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
    </dependencies>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
package com.demo.filter;

import org.springframework.stereotype.Component;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

/**
 * 自定义拦截器
 * @author huangfu
 */
@Component
@WebFilter(filterName = "MyFilter",urlPatterns = {"/*"})
public class MyFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("-----------------执行过滤器---------------------");
        filterChain.doFilter(servletRequest,servletResponse);
    }
}

@WebFilter(filterName = "MyFilter",urlPatterns = {"/*"})

filterName:指定过滤器的名字

urlPatterns:指定拦截的路径 *匹配全部

三、多个过滤器的顺序问题

单项目中出现多个过滤器的情况下,如果对顺序有严格的要求,我们可以手动指定顺序大小

@Order(int level):数值越小,越优先执行!

过滤器1开发

package com.demo.filter;

import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

/**
 * 自定义拦截器
 * @author huangfu
 */
@Component
@WebFilter(filterName = "MyFilter",urlPatterns = {"/*"})
@Order(1)
public class MyFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("-----------------执行过滤器1---------------------");
        filterChain.doFilter(servletRequest,servletResponse);
    }
}

过滤器2开发

package com.demo.filter;


import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

/**
 * @author huangfu
 */
@Component
@WebFilter(filterName = "MyFilter2",urlPatterns = {"/*"})
@Order(2)
public class MyFilter2 implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("-----------执行过滤器2----------------");
        filterChain.doFilter(servletRequest,servletResponse);
    }
}

结果:过滤器1优先执行

本文分享自微信公众号 - JAVA程序狗(javacxg),作者:皇甫嗷嗷叫

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何创建一个与Servlet-api完全解耦和的管理员后台操作日志监控

    在日常开发系统后台时,需要针对管理员操作进行监控,如果使用Spring这一套技术体系,使用AOP切面编程+自定义注解不妨是一个好办法,但是在使用这一套体系的同时...

    止术
  • SpringBoot执行跨域处理

    首先了解一下一个http链接的的组成部分:http://www.huangfu.com:8080/hello.html

    止术
  • RabbitMq基本使用

    止术
  • 《SpringCloud篇:001Eureka服务的注册与发现入门篇》

    https://martinfowler.com/articles/microservices.html

  • Spring cloud 之 Feign Client

    本文接选自 《Netkiller Java 手札》 12.2.2. Eureka Client 12.2.2.1. Maven <project xmln...

    netkiller old
  • 06OpenFeign服务接口调用

    http://localhost/consumer/payment/get/130

    Remember_Ray
  • Feign讲解与应用(文末送书)

    Feign 的英文表意为“假装,伪装,变形”, 是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求,而不用像Java中通过封装HT...

    全栈自学社区
  • Spring Boot · Mongo Repository

    本文节选自《Netkiller Java 手札》 http://www.netkiller.cn/java/ 11.12.5.1. MongoTempla...

    netkiller old
  • Spring boot with MySQL 实例参考

    节选择《Netkiller Java 手札》· Spring 框架 9.7. Spring boot with MySQL 9.7.1. Maven pom.x...

    netkiller old
  • spring-boot - demo

    当我发现把最初的一个demo整的面目全非的时候,突然想要找一个简单的demo做测试,发现与其在原来的上面该,还不如新建一个demo。 官方入门:http://p...

    Ryan-Miao

扫码关注云+社区

领取腾讯云代金券