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

The result

Last updated

Was this helpful?