过滤器Filter
- 定义Filter:定义一个类,实现 Filter 接口,并重写其所有方法。
- 配置Filter:Filter类上加 @WebFilter 注解,配置拦截资源的路径。引导类上加 @ServletComponentScan。
@WebFilter(urlPatterns = "/*")
public class DemoFileter implements Filter {
@Override //初始化方法 调用一次
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("init 初始化方法执行了");
}
@Override //拦截到请求之后调用,调用多次
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("Demo 拦截到了请求");
//放行
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("Demo 放行后拦截到了请求");
}
@Override //销毁方法 调用一次
public void destroy() {
System.out.println("destroy 销毁方法执行了");
}
}
@ServletComponentScan
@SpringBootApplication
public class XyswApplication {
public static void main(String[] args) {
SpringApplication.run(XyswApplication.class, args);
}
}
拦截器Interceptor
- 定义拦截器,实现HandlerInterceptor接口,并重写其所有方法。
- 注册拦截器。
@Component //交给IOC容器管理
public class LoginCheckInterceptor implements HandlerInterceptor {
@Override //目标资源方法运行前运行,返回true: 放行, 返回false, 不放行
public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object handler) throws Exception {
System.out.println("preHandle ...");
return true;
@Override // 目标资源方法运行后运行
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle ...");
}
@Override // 视图渲染完毕后运行, 最后运行
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("AfterHandle ...");
}
}
@Configuration // 配置类--拦截器的管理类
public class WebConfig implements WebMvcConfigurer {
@Autowired
private LoginCheckInterceptor loginCheckInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginCheckInterceptor).addPathPatterns("/**").excludePathPatterns("/login");// 注册拦截器
}
}