一 使用maven新建Spring Boot项目
1. File --> New --> Project... --> Maven ,如下图所示
Project SDK下拉列表框中选择前面安装的 Java1.8,如果下拉列表框中不存在Java 1.8,可以单击New按钮,找到安装Java的位置,选择它。至于Maven中的archetype,不用勾选。然后单击“Next”
2. 给新工程起名springboot-interceptor-and-servletfilter,配置GAV
3.配置pom.xml
使用Maven,通过导入Spring Boot的 starter 模块,可以将许多程序依赖包自动导入工程中。使用Maven的parent POM,还可以更容易地管理依赖的版本和使用默认的配置,工程中的模块也可以很方便地继承它。使用如下代码清单所示的简单maven配置,基本上就能为一个使用Sping Boot开发框架的Web项目开发提供所需的相关依赖。
<?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>org.example</groupId><artifactId>springboot-interceptor-and-servletfilter</artifactId><version>1.0</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.12</version><relativePath/> <!-- lookup parent from repository --></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
4. 创建Controller
在src/main/java下新建三级目录com/practice/demo,在该目录下创建 DemoApplication,以该类作为程序主入口
DemoApplication Controller代码如下
package com.practice.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("/")public String hello() {return "Hello, baby!";}
}
运行该Spring boot应用。浏览器可访问,访问效果如下:
二 为Spring boot项目添加Servlet过滤器
Spring boot Servlet
过滤器是用于拦截应用程序的HTTP请求和响应的对象。通过使用过滤器,可以在两个实例上执行两个操作 -
- 在将请求发送到控制器之前
- 在向客户发送响应之前。
以下代码显示了带有@Component
注解的Servlet过滤器实现类的示例代码。
1. 在springboot项目 com.practice.demo目录下新建SimpleFilter类,该类实现 Filter 接口。
2. 在该实现类SimpleFilter的doFilter()方法中,添加 System.out.println()语句来打印运程主机和运程地址。
完整代码如下:
package com.practice.demo;import org.springframework.stereotype.Component;import javax.servlet.*;
import java.io.IOException;@Component //只有加了该注解,才会生效。不加不生效(但不会报错)
public class SimpleFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {// 可sout快速打出System.out.println()System.out.println("Remote Host:"+servletRequest.getRemoteHost());System.out.println("Remote Address:"+servletRequest.getRemoteAddr());filterChain.doFilter(servletRequest,servletResponse);}@Overridepublic void destroy() {}
}
3. 效果验证
打包,运行jar包
nohup java -jar springboot-interceptor-and-servletfilter-1.0.jar &
浏览器访问:localhost:8080/
查看服务日志,能看到打印了运程主机和运程地址