springboot中自定义过滤器和拦截器的使用
一、自定义过滤器的使用
先编写一个过滤器,实现javax.servlet.Filter接口
@WebFilter(filterName = "loginCheckFilter", urlPatterns = "/*")
@Slf4j
public class LoginCheckFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
String requestURI = request.getRequestURI();
log.info("进入到过滤器doFilter()方法");
log.info("本次请求: {}", requestURI);
filterChain.doFilter(request, response);
}
}
在启动类添加注解@ServletComponentScan
@SpringBootApplication
@ServletComponentScan
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
二、自定义拦截器的使用
先编写一个拦截器,实现HandlerInterceptor接口
@Slf4j
@Component
public class LoginCheckInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String requestURI = request.getRequestURI();
log.info("进入到拦截器中:preHandle() 方法");
log.info("本次请求: {}", requestURI);
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
String requestURI = request.getRequestURI();
log.info("进入到拦截器中:postHandle() 方法中");
log.info("本次请求: {}", requestURI);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
String requestURI = request.getRequestURI();
log.info("进入到拦截器中:afterCompletion() 方法中");
log.info("本次请求: {}", requestURI);
}
}
注册拦截器,实现WebMvcConfigurer接口
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
private final LoginCheckInterceptor loginCheckInterceptor;
public InterceptorConfig(LoginCheckInterceptor loginCheckInterceptor){
this.loginCheckInterceptor = loginCheckInterceptor;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginCheckInterceptor()).addPathPatterns("/**");
}
}