建立拦截器的方法类 ,实现HandlerInterceptor接口
重写里边的三个方法,并设置请求头的key值为sex ,value的值为girl ,当不是这些信息的时候,会进行提示
//这个就是定义一个拦截器 实现这个接口
public class SexIntercepter implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
System.out.println("在执行handler之前去调用prehandle");
final String token = request.getHeader("sex");
if (token != null && token.equals("girl")) {
return true;//可以运行之后的
}
System.out.println("不是女的,快走");
response.setStatus(HttpServletResponse.SC_FOUND);
return false;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("在视图解析器之前,返回modelandview之后进行的操作");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion 视图渲染之后");
}
}
在webconfiger中实现addInterceptors方法,后设置拦截器的要拦截的信心
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new SexIntercepter()).addPathPatterns("/**");
}
当有多个拦截器的时候,order的作用是执行顺序的优先级 ,数字越小,执行的顺序越靠前,如果不设置order,在拦截器中的写的顺序越靠前,越先执行。
也可以设置特定拦截的类型 :例如第一个就是拦截所有api开头的数据
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new TokenIntercepter())
.addPathPatterns("/api/**").order(2);
registry.addInterceptor(new SexIntercepter())
.addPathPatterns("/**").order(1);
}
拦截器就是在数据进入Handler之前进行拦截