登录校验-interceptor/拦截器

Interceptor

概念:拦截前端对后端的某些请求 使用步骤

  1. 自定义拦截器类,实现HandlerInterceptor接口,重写所有的方法(preHandle方法在controller执行之前执行、【postHandle、afterCompletion】在controller执行后执行)
  2. 注册拦截器

详细步骤

过滤器Filter:会拦截所有的资源 拦截器Interceptor:只会拦截spring中的资源 在开发的时候,使用其中的一种就可以了

  1. public class InterceptorDemo implements HandlerInterceptor实现该接口
  2. 实现preHandle/postHandle/afterCompletion方法
  3. 在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("/**")//注册拦截器
;}
}
经验分享 程序员 微信小程序 职场和发展