Spring Boot自定义Filter
Filter功能
Filter使用户可以改变一个Request和修改一个Response。Filter不是一个Servlet,它不能产生一个Response,它能够在一个Request到达Servlet之前预处理Request,也可以在离开 Servlet时处理Response。换种说法,Filter其实是一个 “Servlet Chaining” (Servlet链)。
一个Filter包括:
- 在servlet被调用之前截获
- 在servlet被调用之前检查servlet request
- 根据需要修改request头和request数据
- 根据需要修改response头和response数据
- 在servlet被调用之后截获
自定义Filter
第一种方法(稍麻烦)
1、实现Filter 方法
@Slf4j
public class MyFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest sRequest, ServletResponse sResponse, FilterChain filterChain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) sRequest;
HttpServletResponse response = (HttpServletResponse) sResponse;
String requestURI = request.getRequestURI();
StringBuffer requestURL = request.getRequestURL();
log.info("requestURI: " + requestURI + ", requestURL: " + requestURL);
filterChain.doFilter(request, response);
}
@Override
public void init(FilterConfig config) {
}
}
2、加载Filter配置
@Configuration
@Slf4j
public class WebConfiguration {
@Bean
public FilterRegistrationBean testFilterRegistration() {
// 新建过滤器注册类
FilterRegistrationBean<Filter> registration = new FilterRegistrationBean<>();
// 添加自定义过滤器
registration.setFilter(new MyFilter());
// 设置过滤器的URL模式
registration.addUrlPatterns("/*");
registration.addInitParameter("paramName", "paramValue");
// 设置拦截器的名称
registration.setName("MyFilter");
// 设置过滤器顺序
registration.setOrder(1);
return registration;
}
}
第二种方法(简洁,推荐使用这种)
1、添加 @WebFilter
自定义MyFilter,
@WebFilter(filterName = "myFilter", urlPatterns = "/*")
@Slf4j
public class MyFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest sRequest, ServletResponse sResponse, FilterChain filterChain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) sRequest;
HttpServletResponse response = (HttpServletResponse) sResponse;
String requestURI = request.getRequestURI();
StringBuffer requestURL = request.getRequestURL();
log.info("requestURI: " + requestURI + ", requestURL: " + requestURL);
filterChain.doFilter(request, sResponse);
}
@Override
public void init(FilterConfig config) {
}
}
2、在Application 启动类 添加 @ServletComponentScan
注解
版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/03/09/spring-boot-custom-filter/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。
THE END
0
二维码
打赏
海报
Spring Boot自定义Filter
Filter功能
Filter使用户可以改变一个Request和修改一个Response。Filter不是一个Servlet,它不能产生一个Response,它能够在一个Request到达Servlet之前预处……
文章目录
关闭
共有 0 条评论