Spring Boot 注入 Filter 过滤器的几种方式
Spring Boot 大约 2282 字FilterRegistrationBean
推荐使用FilterRegistrationBean
方式。
@Configuration(proxyBeanMethods = false)
public class FilterConfig {
@Bean
public FilterRegistrationBean<TestFilter> filterRegistrationBean() {
FilterRegistrationBean<TestFilter> filterRegistrationBean = new FilterRegistrationBean<>();
filterRegistrationBean.setFilter(new TestFilter());
filterRegistrationBean.setOrder(FilterRegistrationBean.HIGHEST_PRECEDENCE);
filterRegistrationBean.setUrlPatterns(Collections.singleton("/api/*"));
return filterRegistrationBean;
}
}
@ServletComponentScan
启动类上添加@ServletComponentScan
,扫描Servlet
组件。
@ServletComponentScan
@SpringBootApplication
public class FilterApplication {
public static void main(String[] args) {
SpringApplication.run(FilterApplication.class, args);
}
}
编写Filter
,添加@WebFilter
,设置过滤路径urlPatterns
,@Order
设置过滤器顺序。
@Slf4j
@WebFilter(urlPatterns = {"/api/*"})
@Order
public class TokenFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
log.info("token filter init#{}", filterConfig);
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
log.info("token filter doFilter#{}", request.getServletPath());
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy() {
log.info("token filter destroy");
}
}
@Component
使用@Component
注解注入的Filter
,只能作用于根路径/*
,@WebFilter
不起作用。
@Slf4j
@Component
// @WebFilter(urlPatterns = {"/filter/*"})
public class MyHttpFilter extends HttpFilter {
@Override
protected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
try (ServletInputStream inputStream = request.getInputStream()) {
String req = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
log.info("my http filter doFilter#{}, req#{}", request.getServletPath(), req);
}
super.doFilter(request, response, chain);
}
}
阅读 922 · 发布于 2023-01-21
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb扫描下方二维码关注公众号和小程序↓↓↓
昵称:
随便看看
换一批
-
Java WebSocket The remote endpoint was in state [TEXT_FULL_WRITING] which is an invalid state for called method阅读 5508
-
Java 并发编程之 ConcurrentHashMap 1.7 源码分析阅读 1648
-
MySQL Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root阅读 5799
-
Windows10 访问网页提示找不到服务器 IP 地址阅读 10922
-
GitHub OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443阅读 6354
-
Windows PowerShell 设置命令别名永久生效阅读 1327
-
算法:无重复字符的最长子串阅读 1168
-
Go 加密算法之 md5阅读 1877
-
Redis 提示没有权限阅读 3743
-
Vue2 生命周期阅读 559