自定义拦截器
实现这个HandlerInterceptor 接口
@Component
@Slf4j
public class SampleInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("\n已进入拦截器");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("控制器执行完毕");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("得到的返回结果: " + response);
System.out.println("请求完毕\n");
}
}
给自定义的拦截器加拦截规则
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Autowired
private SampleInterceptor sampleInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
//拦截路径 添加了路径就不会走拦截器
registry.addInterceptor(sampleInterceptor)
.addPathPatterns("/**")
.excludePathPatterns("/**/inter/interceptor")
.excludePathPatterns("/error");
WebMvcConfigurer.super.addInterceptors(registry);
}
}
过滤器
在使用这种方式时 一定记得在启动类上加注解 @ServletComponentScan(“com.yy.filter”)
第一种方式
package com.yy.filter;
import javax.servlet.*;
import java.io.IOException;
/**
* @author yy 过滤器
* @date 2022/8/7 8:54
*/
public class SampleFilterJava implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("SampleFilter----- 初始化Fiter");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
System.out.println("SampleFilter---进入 Target Resource之前的事情");
filterChain.doFilter(servletRequest, servletResponse);
System.out.println("SampleFilter---处理返回的Response");
}
@Override
public void destroy () {
System.out.println("SampleFilter---销毁Filter");
}
}
package com.yy.filter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author yy 过滤器
* @date 2022/8/7 8:54
*/
@Configuration
public class SampleFilterJavaConfig {
@Bean
public FilterRegistrationBean javaFilter() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(new SampleFilterJava());
filterRegistrationBean.addUrlPatterns("/demo/*");
filterRegistrationBean.setName("SampleFilterJavaConfig");
filterRegistrationBean.setOrder(1);
return filterRegistrationBean;
}
}
第二种方式
package com.yy.filter;
import org.springframework.core.annotation.Order;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
/**
* @author yy 过滤器
* @date 2022/8/7 8:54
*/
@Order(2)
@WebFilter(filterName = "sampleFilterAnnotation", urlPatterns = {"/filterTest/*"})
public class SampleFilterAnnotation implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("SampleFilterAnnotation----- 初始化Fiter");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
System.out.println("SampleFilterAnnotation---进入 Target Resource之前的事情");
filterChain.doFilter(servletRequest, servletResponse);
System.out.println("SampleFilterAnnotation---处理返回的Response");
}
@Override
public void destroy () {
System.out.println("SampleFilterAnnotation---销毁Filter");
}
}