登录校验-interceptor/拦截器
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("/**")//注册拦截器 ;} }