Interceptor
概念:拦截前端对后端的某些请求
使用步骤
- 自定义拦截器类,实现HandlerInterceptor接口,重写所有的方法(preHandle方法在controller执行之前执行、【postHandle、afterCompletion】在controller执行后执行)
- 注册拦截器
详细步骤
过滤器Filter:会拦截所有的资源
拦截器Interceptor:只会拦截spring中的资源
在开发的时候,使用其中的一种就可以了
public class InterceptorDemo implements HandlerInterceptor实现该接口
实现preHandle/postHandle/afterCompletion方法
在preHandle方法中添加
//和servlet过滤器的流程一致,在这里true表示放行,false表示拦截
String url=res.getRequestURI().toString();
if(url.contains("login"))
{
System.out.print("跳转到登录页面");
return true;
}
String jtw=res.getHeader("token");
if(!StringUtils.hasLength(jtw))
{
Result error=Result.error("no_login");
String nologin= JSONObject.toJSONString(error);
rsp.getWriter().write(nologin);
log.info("interceptor拦截1"+url);
return false;
}
try
{
Jwt.parseJWT(jtw);
}catch (Exception e)
{
e.printStackTrace();
Result error=Result.error("no_login");
String nologin= JSONObject.toJSONString(error);
rsp.getWriter().write(nologin);
log.info("interceptor拦截2"+url);
return false;
}
return true;
4.创建配置类实现 WebMvcConfigurer
@Configuration//申明是配置文件
public class InterceptorDemoconfig implements WebMvcConfigurer {
@Autowired
private InterceptorDemo interceptorDemo;//注入拦截器对象
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(interceptorDemo).addPathPatterns("/**")//注册拦截器
;}
}