- 方法一、对于所有的url生效:
通过@Component实现Filter接口即可;
@Order指定了两个fiter的顺序。下面的例子,两个fiter对于所有的url生效
@Slf4j
@Component
@Order(1)
public class TransactionFilter implements Filter {
@Override
public 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 {
@Override
public 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
}
- 方法二、filter对于特定的某些url生效:
1、实现Filter接口,实现Filter方法;
2、添加@Configuration注解,将自定义Filter加入过滤链
@Configuration
public class MyConfiguration {
@Bean
public RemoteIpFilter remoteIpFilter() {
return new RemoteIpFilter();
}
@Bean
public FilterRegistrationBean testFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new MyFilter());
registration.addUrlPatterns("/*");
registration.addInitParameter("paramName", "paramValue");
registration.setName("MyFilter");
registration.setOrder(1);
return registration;
}
}
public class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
System.out.println("this is MyFilter,url :"+request.getRequestURI());
String username=request.getParameter("username");
if(username!=null && username.length()>0) {
filterChain.doFilter(servletRequest, servletResponse);
}
}
}