Spring Boot 快速入門之(十四):Servlet 過濾器
【注】本文譯自:? https://www.tutorialspoint.com/spring_boot/spring_boot_servlet_filter.htm

? ? ? ? 過濾器是一種攔截應(yīng)用中 HTTP 請(qǐng)求和響應(yīng)的對(duì)象,使用過濾器,你可以執(zhí)行以下兩種情形下的兩種操作:
在發(fā)送請(qǐng)求到到控制器之前
在發(fā)送響應(yīng)到客戶端之前
? ? ? ?下面的示例代碼是以?@Component 注解的類來實(shí)現(xiàn) Servlet 過濾器:
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?{}
}
? ? ? ?下面的示例代碼展示了在發(fā)送請(qǐng)求到控制器之前,從?ServletRequest 對(duì)象讀取遠(yuǎn)程主機(jī)和地址:
? ? ? ?在?doFilter() 方法中,我們加了 System.out.println 語句打印遠(yuǎn)程主機(jī)和地址:
package?com.tutorialspoint.demo;
import?java.io.IOException;
import?javax.servlet.Filter;
import?javax.servlet.FilterChain;
import?javax.servlet.FilterConfig;
import?javax.servlet.ServletException;
import?javax.servlet.ServletRequest;
import?javax.servlet.ServletResponse;
import?org.springframework.stereotype.Component;
@Component
public?class?SimpleFilter?implements?Filter?{
???@Override
???public?void?destroy()?{}
???@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?init(FilterConfig?filterconfig)?throws?ServletException?{}
}
? ? ? ?在?Spring Boot 主應(yīng)用類文件中,我們加了簡(jiǎn)單 REST 端點(diǎn)返回 “Hello World” 字串:
package?com.tutorialspoint.demo;
import?org.springframework.boot.SpringApplication;
import?org.springframework.boot.autoconfigure.SpringBootApplication;
import?org.springframework.web.bind.annotation.RequestMapping;
import?org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public?class?DemoApplication?{
???public?static?void?main(String[]?args)?{
??????SpringApplication.run(DemoApplication.class,?args);
???}
???@RequestMapping(value?=?"/")
???public?String?hello()?{
??????return?"Hello?World";
???}
}
? ? ? ?Maven build –?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.tutorialspoint</groupId>
???<artifactId>demo</artifactId>
???<version>0.0.1-SNAPSHOT</version>
???<packaging>jar</packaging>
???<name>demo</name>
???<description>Demo?project?for?Spring?Boot</description>
???<parent>
??????<groupId>org.springframework.boot</groupId>
??????<artifactId>spring-boot-starter-parent</artifactId>
??????<version>1.5.8.RELEASE</version>
??????<relativePath/>?
???</parent>
???<properties>
??????<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
??????<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
??????<java.version>1.8</java.version>
???</properties>
???<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.tutorialspoint'
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')
}
? ? ? ?你可以使用以下 Maven 或 Gradle 命令來創(chuàng)建可執(zhí)行?JAR 文件,運(yùn)行 Spring Boot 應(yīng)用:
? ? ? ?Maven 命令如下:
mvn?clean?install
? ? ? ?在 BUILD SUCCESS 之后,你可以在 target 目錄下找到 JAR 文件。
? ? ? Gradle 命令如下:
gradle?clean?build
? ? ? ?在 BUILD SUCCESSFUL 之后,你可以在 build/libs 目錄下找到?JAR 文件。
? ? ? ?現(xiàn)在,使用下面的命令運(yùn)行?JAR 文件:
java?–jar?<JARFILE>?
? ? ? ?你可以看到應(yīng)用已經(jīng)在?Tomcat 端口號(hào) 8080 啟動(dòng)了。
? ? ? ?現(xiàn)在單擊 URL?http://localhost:8080/?可以看到輸出了 Hello World??雌饋響?yīng)當(dāng)是下面的樣子:

? ? ? ?然后你可以看到如下所示的控制臺(tái)日志:
