Spring Boot Servlet 过滤器

Servlet 过滤器是用于拦截应用程序的 HTTP 请求和响应的对象。 通过使用过滤器,我们可以在两个实例上执行两个操作

  • 在向控制器发送请求之前
  • 在向客户端发送响应之前

以下代码显示了带有 @Component 注解的 Servlet 过滤器实现类的示例代码。

@Component
public class SimpleFilter implements Filter {
   @Override
   public void destroy() {}

   @Override
   public void doFilter
      (ServletRequest request, ServletResponse response, FilterChain filterchain) 
      throws IOException, ServletException {}

   @Override
   public void init(FilterConfig filterconfig) throws ServletException {}
}

以下示例显示了在将请求发送到控制器之前从 ServletRequest 对象读取远程主机和远程地址的代码。

doFilter() 方法中,我们添加了 System.out.println 语句来打印远程主机和远程地址。

package com.study.filter;

import org.springframework.stereotype.Component;

import javax.servlet.Filter;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.FilterConfig;

import java.io.IOException;

@Component
public class SimpleFilter implements Filter {


    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("Remote Host:"+request.getRemoteHost());
        System.out.println("Remote Address:"+request.getRemoteAddr());
        filterChain.doFilter(request, response);
    }

    @Override
    public void destroy() {

    }
}

在 Spring Boot 主应用程序类文件中,我们添加了返回 “Hello 迹忆客(jiyik.com)” 字符串的简单 REST 端点。

package com.study;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @author jiyik.com
 */
@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }

    @RequestMapping(value = "/")
    public String hello() {
        return "Hello 迹忆客(jiyik.com)";
    }
}

Maven 构建的代码 – pom.xml 如下所示

<?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.spring</groupId>
    <artifactId>springBootProject</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.6</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

Gradle Build - build.gradle 的代码如下

buildscript {
   ext {
      springBootVersion = '1.5.8.RELEASE'
   }
   repositories {
      mavenCentral()
   }
   dependencies {
      classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
   }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'

group = 'com.study'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
   mavenCentral()
}
dependencies {
   compile('org.springframework.boot:spring-boot-starter-web')
   testCompile('org.springframework.boot:spring-boot-starter-test')
}

这里我们使用 IDEA 来启动服务(读者也可以使用 mvn clean install 或者 gradle clean build 生成可执行jar包)

spring boot 异常处理 IDEA启动服务

现在访问 URL http://localhost:8080/ 并查看输出 Hello 迹忆客(jiyik.com)。 如下所示

Spring Boot Servlet 过滤器

然后,我们可以在控制台日志中看到远程主机和远程地址,如下所示

Spring Boot Servlet 过滤器控制台

查看笔记

扫码一下
查看教程更方便