springboot使用拦截器-过滤器-servlet-listener
项目地址:https://github.com/heng1234/springboot2.x/tree/master/inte_filter_servlet
一、springboot使用拦截器
一个拦截器,只有preHandle方法返回true,postHandle、afterCompletion才有可能被执行;如果preHandle方法返回false,则该拦截器的postHandle、afterCompletion必然不会被执行。拦截器不是Filter,却实现了Filter的功能,其原理在于:
所有的拦截器(Interceptor)和处理器(Handler)都注册在HandlerMapping中。 Spring MVC中所有的请求都是由DispatcherServlet分发的。 当请求进入DispatcherServlet.doDispatch()时候,首先会得到处理该请求的Handler(即Controller中对应的方法)以及所有拦截该请求的拦截器。拦截器就是在这里被调用开始工作的。
新建WebMvcConfigurer实现WebMvcConfigurer
import com.boot.inte_filter_servlet.interceptor.init.UserInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
/**
* @author : kaifa
* create at: 2019-11-04 18:18
* @description: 拦截器配置
*/
@Configuration
public class WebMvcConfigurer implements org.springframework.web.servlet.config.annotation.WebMvcConfigurer {
@Autowired
private UserInterceptor userInterceptor;
//配置拦截的资源以及放行的资源
@Override
public void addInterceptors(InterceptorRegistry registry) {
/**
* 拦截器按照顺序执行
*/
//拦截Controller所有 /*/** userInterceptor是定义的拦截器
registry.addInterceptor(userInterceptor)
//拦截的url /**是所有
.addPathPatterns("/**")
//不拦截url
.excludePathPatterns("/user/notInit")
//放行静态资源
.excludePathPatterns("/img/**","/css/**","/fonts/**","/js/**");
}
//配置静态资源的位置
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
}
}定义拦截器
UserInterceptor实现HandlerInterceptor
controller测试拦截器
访问http://localhost:7008/user/init

访问http://localhost:7008/user/notInit则不会拦截因为拦截器配置了不拦截此路径
二、springboot使用过滤器注解版
在启动类加上@ServletComponentScan注解
UserWebFilter
测试过滤器
启动项目

访问url

停止工程


三、springboot使用servlet
UserServlet

四、springboot使用listener
Last updated
Was this helpful?