拦截器
是指通过统一拦截浏览器向服务器发送的请求并进行增强的东西。主要应用例如:编码,权限验证。
过滤器
依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数据,比如:在过滤器中修改字符编码;在过滤器中修改HttpServletRequest的一些参数,包括:过滤低俗文字、危险字符等。类似公路上的收费站。
共同点
抛开细节,过滤器和拦截器的功能非常相似。
实现一个拦截器,
1.实现HandlerInterceptor接口,实现三个方法。
2.注册拦截器,springboot是编写一个配置类继承WebMvcConfigurerAdapter重写addInterceptors方法注册
3.如果需要配置拦截规则,可以自行配置,参考官网文档把。
1 package com.example.demo; 2 3 import org.springframework.web.servlet.HandlerInterceptor; 4 import org.springframework.web.servlet.ModelAndView; 5 6 import javax.servlet.http.HttpServletRequest; 7 import javax.servlet.http.HttpServletResponse; 8 9 /** 10 * Created by 20160216 on 2018/2/8. 11 */ 12 public class SessionInterceptor implements HandlerInterceptor 13 { 14 @Override 15 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception { 16 System.out.println("uri="+request.getRequestURI()); 17 //登录不做拦截 18 if(request.getRequestURI().equals("/userbg/login") || request.getRequestURI().equals("/user/login_view")) 19 { 20 return true; 21 } 22 //验证session是否存在 23 Object obj = request.getSession().getAttribute("_session_user"); 24 if(obj == null) 25 { 26 response.sendRedirect("/user/login_view"); 27 return false; 28 } 29 return true; 30 } 31 32 @Override 33 public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception { 34 35 } 36 37 @Override 38 public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception { 39 40 } 41 }