SpringBoot中请求拦截体系
【pom.xml】
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.3.0.RELEASE</version>
</dependency>
【拦截器】
import org.slf4j.Logger;
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;
import static org.slf4j.LoggerFactory.getLogger;
@Component
public class CustomRequestInterceptor implements HandlerInterceptor {
private static final Logger logger = getLogger(CustomRequestInterceptor.class);
private final String[] whitelist = new String[]{
"test",
};
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 白名单api放行
String url = request.getRequestURI();
for (String s : whitelist) {
if (url.contains(s)) {
return HandlerInterceptor.super.preHandle(request, response, handler);
}
}
// 拦截标志,默认不拦截
Boolean filterFlag = false;
// 拦截条件一
String token = request.getHeader("token");
if (StrUtil.isEmpty(token)) {
filterFlag = true;
}
// 拦截条件二
// ...
if (filterFlag) {
logger.info("######################### \t[ 拦截请求 ]\t #########################");
response.setContentType("application/json;charset=UTF-8");
response.getWriter().write("{\"msg\":\"请求异常!\",\"code\":400}");
response.setStatus(400);
response.flushBuffer();
// 返回false既为拦截
return false;
}
return HandlerInterceptor.super.preHandle(request, response, handler);
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
}
【配置拦截器】
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @author JHL
* @version 1.0
* @since : JDK 11
*/
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired
private CustomRequestInterceptor customRequestInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 路径支持正则匹配
registry.addInterceptor(customRequestInterceptor).addPathPatterns("/**/**");
}
}
请求拦截过滤参考:
https://mrbird.cc/Spring-Boot-Filter-Interceptor.html
代码参考:
· 分享4款.NET开源、免费、实用的商城系统
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了