在编写过滤器,监听器,拦截器之前我们需要在spring-boot启动的类上加上注解@ServletComponentScan:
@SpringBootApplication @ServletComponentScan 公开课MySpringbootApplication { 公共静态void main (String [] args) { SpringApplication.run (MySpringbootApplication.class, args); } }
spring-boot编写过滤器和春天中差不多,直接看代码:
@WebServlet (urlpattern="/服务公司”) 公开课MyServlet扩展HttpServlet { @Override 保护无效doGet (HttpServletRequest请求,HttpServletResponse响应){ System.out.println(“象doget - - - - - - - - - - - - - - - - - - - - - - - - -”); doPost(请求、响应); } @Override 保护无效doPost (HttpServletRequest请求,HttpServletResponse响应){ System.out.println (“- - - - - - - - - - - - dopost - - - - - - - - - - - - -”); } }
其实也就是注解的不同而已:
@WebServlet (urlpattern="/服务公司”)
在spring-boot里编写过滤器我们只需要实现javax.servlet.Filter
@WebFilter (filterName=癿yFilter urlpattern="/* ") 公共类MyFilter实现滤波器{ @Override FilterConfig FilterConfig公共空init()抛出ServletException { System.out.println(“初始化过滤器”); } @Override 公共空间的doFilter (ServletRequest ServletRequest, ServletResponse ServletResponse, FilterChain FilterChain)抛出IOException, ServletException { System.out.println(“执行过滤器”); filterChain。doFilter (servletRequest servletResponse); } @Override 公共空间摧毁(){ System.out.println(“销毁过滤器!”); } }
然后添加一个注解:
@WebFilter (filterName=癿yFilter urlpattern="/* ")
在上面,看了下过滤器的使用。其实监听器和拦截器就差不多了,直接上代码:
@WebListener 公共类MyHttpSessionListener实现HttpSessionListener { @Override 公共空间sessionCreated (HttpSessionEvent HttpSessionEvent) { system . out。println(“会话被创建”); } @Override 公共空间sessionDestroyed (HttpSessionEvent HttpSessionEvent) { system . out。println(“会话被摧毁”); } }
我们发现只是注解发生了变化:
@WebListener
拦截器大致和上面差不多,不过有一点点不同。我们知道在网上开发中,可以使用过滤器和拦截器来过滤外部的网站请求。但是拦截器提供了更加细致的控制功能。主要有:请求之前,请求之后渲染之前,渲染之后,请求全部结束之后这四个步骤的拦截。
自定义拦截器,实现org.springframework.web.servlet.HandlerInterceptor
自定义WebAppConfigurer,继承WebMvcConfigurerAdapter
在自定义的WebAppConfigurer覆盖父类方法addInterceptors (InterceptorRegistry注册表),并在方法中添加自己定义的拦截器
公共类MyInterceptor实现HandlerInterceptor { @Override 公共布尔preHandle (HttpServletRequest HttpServletRequest HttpServletResponse HttpServletResponse,对象o){抛出异常 System.out.println (MyInterceptor.class.getName() +”:在请求之前调用”); 返回true; } @Override 公共空postHandle (HttpServletRequest HttpServletRequest HttpServletResponse HttpServletResponse,对象o, ModelAndView ModelAndView){抛出异常 System.out.println (MyInterceptor.class.getName() +”:请求处理之后视图渲染之前使用”); } @Override 公共空afterCompletion (HttpServletRequest HttpServletRequest HttpServletResponse HttpServletResponse,对象o,异常e){抛出异常 System.out.println (MyInterceptor.class.getName() +”:请视图渲染之后使用”); } } @ configuration 公开课MyWebAppConfigurer延伸WebMvcConfigurerAdapter { @Override 公共空间addInterceptors (InterceptorRegistry注册表){//多个拦截器组成一个拦截器链//addPathPatterns用于添加拦截规则//excludePathPatterns用户排除拦截 注册表。addInterceptor(新MyInterceptor ()) .addPathPatterns (“/* *”); 注册表。addInterceptor(新MyInterceptor2 ()) .addPathPatterns (“/* *”); super.addInterceptors(注册表); } }弹簧引导编写Servlet、过滤器、监听器拦截器的方法