SpringBoot拦截器与过滤器

285 阅读1分钟
拦截器
  • 自定义拦截器

    @Component
    public class LoginInterceptor implements HandlerInterceptor {
       
        @Autowired
        private LoginService loginService;
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            
            String token = request.getHeader("Authorization");
            
            SysUser sysUser = loginService.checkToken(token);
            if (sysUser == null){
                Result result = Result.fail(ErrorCode.NO_LOGIN.getCode(), "未登录");
                
                response.setContentType("application/json;charset=utf-8");
                response.getWriter().print(JSON.toJSONString(result));
                return false;
            }
            
            return true;
        }
    }
    
  • 注册拦截器,实现implements WebMvcConfigurer

    @Configuration
    public class WebMVCConfig implements WebMvcConfigurer {
    
        @Autowired
        private LoginInterceptor loginInterceptor;
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(loginInterceptor)
                    .addPathPatterns("/test");
        }
    }
    
过滤器
  • 自定义filter

    @WebFilter(filterName = "testFilter", urlPatterns = "/*")
    public class TestFilter implements Filter {
    
        @Override
        public void init(FilterConfig filterConfig){
        }
    
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            System.out.println("我是过滤器的执行方法,客户端向Servlet发送的请求被我拦截到了");
    
            filterChain.doFilter(servletRequest, servletResponse);
            
            System.out.println("我是过滤器的执行方法,Servlet向客户端发送的响应被我拦截到了");
        }
    
        // 在销毁Filter时自动调用
        @Override
        public void destroy() {
            System.out.println("我是过滤器的被销毁时调用的方法!" );
        }
    }
    
  • 主启动类加@ServletComponentScan 注解

    @SpringBootApplication
    @ServletComponentScan
    public class SpringBootApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringBootApplication.class, args);
        }
    
    }