美文网首页
使用 zuul权限校验

使用 zuul权限校验

作者: Pts | 来源:发表于2019-05-22 23:37 被阅读0次
    • 全新校验拦截器
    /**
     * 登录过滤器
     *记得类上加Component注解
     */
    @Component
    public class LoginFilter extends ZuulFilter {
    
        /**
         * 过滤器类型,前置过滤器
         */
        @Override
        public String filterType() {
            return PRE_TYPE;
        }
    
        /**
         * 过滤器顺序,越小越先执行
         */
        @Override
        public int filterOrder() {
            return 4;
        }
    
        /**
         * 过滤器是否生效
         * 返回true代表需要权限校验,false代表不需要用户校验即可访问
         */
        @Override
        public boolean shouldFilter() {
    
            //共享RequestContext,上下文对象
            RequestContext requestContext = RequestContext.getCurrentContext();
            HttpServletRequest request = requestContext.getRequest();
    
            System.out.println(request.getRequestURI());
            //需要权限校验URL
            if ("/apigateway/order/api/v1/order/save".equalsIgnoreCase(request.getRequestURI())) {
                return true;
            } else if ("/apigateway/order/api/v1/order/list".equalsIgnoreCase(request.getRequestURI())) {
                return true;
            } else if ("/apigateway/order/api/v1/order/find".equalsIgnoreCase(request.getRequestURI())) {
                return true;
            }
            return false;
        }
    
        /**
         * 业务逻辑
         * 只有上面返回true的时候,才会进入到该方法
         */
        @Override
        public Object run() throws ZuulException {
    
            //JWT
            RequestContext requestContext = RequestContext.getCurrentContext();
            HttpServletRequest request = requestContext.getRequest();
    
            //token对象,有可能在请求头传递过来,也有可能是通过参数传过来,实际开发一般都是请求头方式
            String token = request.getHeader("token");
    
            if (StringUtils.isBlank((token))) {
                token = request.getParameter("token");
            }
            System.out.println("页面传来的token值为:" + token);
            //登录校验逻辑  如果token为null,则直接返回客户端,而不进行下一步接口调用
            if (StringUtils.isBlank(token)) {
                // 过滤该请求,不对其进行路由
                requestContext.setSendZuulResponse(false);
                //返回错误代码
                requestContext.setResponseStatusCode(HttpStatus.UNAUTHORIZED.value());
            }
            return null;
        }
    }
    
    
    • 关键说明

    (1)方法说明

    filterType : filter类型,分为pre、error、post、 route

    filterOrder: filter执行顺序,通过数字指定,数字越小,执行顺序越先

    shouldFilter: filter是否需要执行 true执行 false 不执行

    run : filter具体逻辑(上面为true那么这里就是具体执行逻辑)

    (2)filter类型说明

             pre: 请求执行之前filter
    
             route: 处理请求,进行路由
    
             post: 请求处理完成后执行的filter
    
             error: 出现错误时执行的filter
    
    

    买家登录

    GET /login/buyer
    
    

    参数

    openid: abc
    
    

    返回

    cookie里设置openid=abc

    {
        code: 0,
        msg: "成功",
        data: null
    }
    
    

    卖家登录

    GET /login/seller
    
    

    参数

    openid: xyz
    
    

    返回

    cookie里设置token=UUID, redis设置key=UUID, value=xyz

    {
        code: 0,
        msg: "成功",
        data: null
    }
    
    

    相关文章

      网友评论

          本文标题:使用 zuul权限校验

          本文链接:https://www.haomeiwen.com/subject/aqcmzqtx.html