拦截器在 Web 项目中发挥着重要的作用,其可以帮助应用过滤掉无效的请求。Spring Boot 中拦截器的实现方式主要有两种,一种是通过实现 javax.servlet.Filter
接口,这一种方式是传统的拦截器,能够实现的功能较少;另一种是使用 Spring 框架的拦截器,实现 org.springframework.web.servlet.HandlerInterceptor
接口。本文将介绍通过Spring Boot 2.X(Spring 5.X) HandlerInterceptor
拦截器的简单应用。
Filter
拦截器可参考:
22.SpringBoot 项目之前端跨域终结者—2019-05-23
../pom.xml
../demo-web/pom.xml
<!-- web,mvc -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${springboot.version}</version>
</dependency>
../demo-web/src/main/java/com/ljq/demo/springboot/web/acpect/SimpleInterceptor.java
package com.ljq.demo.springboot.web.acpect;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @Description: 简易拦截器应用
* @Author: junqiang.lu
* @Date: 2019/12/10
*/
@Slf4j
@Component
public class SimpleInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.info("preHandle");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
log.info("postHandle");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
log.info("afterCompletion");
log.info("Content-Type: {}", response.getHeader("Content-Type"));
}
}
方法说明:
prehandle()
: 该方法在拦截器执行之前执行,此时返回视图未生成
postHandle()
: 拦截器执行方法
afterCompletion()
: 请求处理完成之后,此时返回视图已经生成
../demo-web/src/main/java/com/ljq/demo/springboot/web/acpect/MvcConfig.java
package com.ljq.demo.springboot.web.acpect;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @Description: wed mvc 配置信息
* @Author: junqiang.lu
* @Date: 2019/12/10
*/
@Component
public class MvcConfig implements WebMvcConfigurer {
@Autowired
private SimpleInterceptor simpleInterceptor;
/**
* 指定拦截器
*
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(simpleInterceptor)
.addPathPatterns("/**")
.excludePathPatterns("/swagger-resources/**", "/webjars/**", "/v2/**", "/swagger-ui.html/**");
}
/**
* 资源过滤
*
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
/**
* 跨域处理
*
* @param registry
*/
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedMethods("GET","HEAD","POST","PUT","PATCH","DELETE","OPTIONS","TRACE")
.allowedOrigins("*")
.allowedHeaders("*")
.maxAge(3600);
}
}
Introduction to Spring MVC HandlerInterceptor
commit 4e32a9543e692ad8e10254a26ce3fbb5154c136f
Author: flying9001 <flying9001@gmail.com>
Date: Tue Dec 10 16:34:32 2019 +0800
代码-新增 Spring Boot 2(Spring 5.0+) HandlerInterceptor 拦截器简单示例
版本回退命令:
git reset --soft 4e32a9543e692ad8e10254a26ce3fbb5154c136f