zoukankan      html  css  js  c++  java
  • Zuul 网关做token权限验证

    zuul 传递请求头 

    @Component
    public class WebFilter extends ZuulFilter {
        @Override
        public String filterType() {
            return "pre";
        }
    
        @Override
        public int filterOrder() {
            return 0;
        }
    
        @Override
        public boolean shouldFilter() {
            return true;
        }
    
        @Override
        public Object run() throws ZuulException {
            //得到request上下文
            RequestContext currentContext = RequestContext.getCurrentContext();
            //得到request域
            HttpServletRequest request = currentContext.getRequest();
            //得到头信息
            String header = request.getHeader("Authorization");
            //判断是否有头信息
            if(header!=null && !"".equals(header)){
                //把头信息继续向下传
                currentContext.addZuulRequestHeader("Authorization", header);
            }
            return null;
        }
    }

    做权限验证  

    @Component
    public class ManagerFilter extends ZuulFilter {
    
        @Autowired
        private JwtUtil jwtUtil;
        /**
         * 在请求前pre或者后post执行
         * @return
         */
        @Override
        public String filterType() {
            return "pre";
        }
    
        /**
         * 多个过滤器的执行顺序,数字越小,表示越先执行
         * @return
         */
        @Override
        public int filterOrder() {
            return 0;
        }
    
        /**
         * 当前过滤器是否开启true表示开启
         * @return
         */
        @Override
        public boolean shouldFilter() {
            return true;
        }
    
        /**
         * 过滤器内执行的操作 return 任何ojbect的值都表示继续执行
         * setsendzullRespponse(false)表示不再继续执行
         * @return
         * @throws ZuulException
         */
        @Override
        public Object run() throws ZuulException {
            System.out.println("经过后台过滤器了!");
            RequestContext requestContext = RequestContext.getCurrentContext();
            //request域
            HttpServletRequest request = requestContext.getRequest();
    
            if(request.getMethod().equals("OPTIONS")){  //预请求 放行
                return null;
            }
    
            if(request.getRequestURI().indexOf("login")>0){ //登录请求放行
                return null;
            }
    
            //得到头信息
            String header = request.getHeader("Authorization");
            if(header!=null && !"".equals(header)){
                if(header.startsWith("Bearer ")){
                    String token = header.substring(7);
                    try {
                        Claims claims = jwtUtil.parseJWT(token);
                        String roles = (String) claims.get("roles");
                        if(roles.equals("admin")){
                            //把头信息转发下去,并且放行
                            requestContext.addZuulRequestHeader("Authorization", header);
                            return null;
                        }
                    }catch (Exception e){
                        e.printStackTrace();
                        requestContext.setSendZuulResponse(false);//终止运行
                    }
                }
            }
            requestContext.setSendZuulResponse(false);//终止运行
            requestContext.setResponseStatusCode(403);
            requestContext.setResponseBody("权限不足");
            requestContext.getResponse().setContentType("text/html;charset=utf-8");
            return null;
        }
    }
  • 相关阅读:
    微信开发者工具打开一直处于初始化应用通信能力界面的解决办法
    vuex学习笔记
    生产环境下的log 在正式环境下隐藏log
    el-table 表头添加下拉筛选框 附带输入过滤
    element-ui table type=“expand“ 无内容时 不可展开
    窗口移到了电脑桌面边缘外拖不回来解决办法
    yarn的基础语法:yarn安装完vue cli3后提示不是内部命令
    nodejs npm错误Error:UNKNOWN:unknown error,mkdir 'D:Develop odejs ode_global'at Error(可行)
    vue-cli 更新遇到的问题,卸载不掉旧版本2.9.6(可行)
    vue基础——命名路由
  • 原文地址:https://www.cnblogs.com/qin1993/p/12567051.html
Copyright © 2011-2022 走看看