Spring Boot filter
  TEZNKK3IfmPf 2023年11月14日 34 0

在Spring Boot中自定义filter

本文我们将会讲解如何在Spring Boot中自定义filter并指定执行顺序。

定义Filter很简单,我们只需要实现Filter接口即可,同时我们可指定@Order来确定其执行顺序,我们定义两个filter如下:

@Slf4j@Component@Order(1)public class TransactionFilter implements Filter {@Overridepublic void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException, ServletException{HttpServletRequest req = (HttpServletRequest) request;log.info("Starting a transaction for req : {}",req.getRequestURI());chain.doFilter(request, response);log.info("Committing a transaction for req : {}",req.getRequestURI());}// other methods}

 

@Slf4j@Component@Order(2)public class RequestResponseLoggingFilter implements Filter {@Overridepublic void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException, ServletException {HttpServletRequest req = (HttpServletRequest) request;HttpServletResponse res = (HttpServletResponse) response;log.info("Logging Request  {} : {}", req.getMethod(),req.getRequestURI());chain.doFilter(request, response);log.info("Logging Response :{}",res.getContentType());}// other methods}

 

注意在Spring Boot中我们需要使用@Component来实例化Filter从而在Spring Boot中生效。

@Order指定了两个fiter的顺序。

上面的例子我们指定了两个fiter对于所有的url生效,如果我们希望filter对于特定的某些url生效该怎么办呢?

我们可使用FilterRegistrationBean来手动注册对于的Filter:

    @Beanpublic FilterRegistrationBean<UrlFilter> loggingFilter(){FilterRegistrationBean<UrlFilter> registrationBean= new FilterRegistrationBean<>();registrationBean.setFilter(new UrlFilter());registrationBean.addUrlPatterns("/users/*");return registrationBean;}

 

上面我们同时指定了filter对应的urlPatttern。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月14日 0

暂无评论

推荐阅读
TEZNKK3IfmPf