Filter
Introduction
Filter is used to do user authorization , logging, ....
If the condition doesn't meet, the chain can be broken, so that logic of controller will not triggered
Add the filter
Implementation
The aim is to filter the controller
@GetMapping("/hello")
public String hello(){
logger.info("coach" + coachConfig.getName()+ " " + coachConfig.getUserId());
return "hello: " + coachName;
}
Add the servlet scanning in main class, so as to scan the filter component
@SpringBootApplication
@ServletComponentScan
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
@WebFilter(filterName = "TimeLogFilter",urlPatterns = "/*")
@Order(1)
public class TimeLogFilter implements Filter {
private static Logger logger = LoggerFactory.getLogger(TimeLogFilter.class);
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
Long beforeTime = System.currentTimeMillis();
filterChain.doFilter(servletRequest, servletResponse);
logger.info("Time needed: " + (System.currentTimeMillis()- beforeTime));
}
}
@WebFilter(filterName = "RequestLogFilter", urlPatterns = "/*")
@Order(2)
public class RequestLogFilter implements Filter {
private static Logger logger = LoggerFactory.getLogger(RequestLogFilter.class);
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
logger.info("request: " + request);
filterChain.doFilter(servletRequest,servletResponse);
logger.info("response: " + servletResponse);
}
}
Flow
when user do a request -> entering first filter -> chain do filter -> entering second filter -> chain do filter -> entering controller method -> after finished controller method - > go back to first filter -> then second filter

Last updated
Was this helpful?