zoukankan      html  css  js  c++  java
  • spring cloud zuul filter 设置过滤请求

    利用spring cloud zuul 设置spring boot 中的filter ,出现了跨域问题,然后根据设置response可解决跨域,同时完成过滤请求

    *********************************************************************************************************************

    //主要执行的类
    public class PreRequestLogFilter extends ZuulFilter  {
        /**
         * Logger for this class
         */
        private static final Logger logger = LoggerFactory.getLogger(PreRequestLogFilter.class);

        
        @Override
        public String filterType() {
            System.out.println("**************filterType ");
            return "pre";
        }

        @Override
        public int filterOrder() {
            System.out.println("**************filterOrder");
            return 1;
        }

        @Override
        public boolean shouldFilter() {
                return true;  
        }

        @Override
        public Object run() {
            RequestContext ctx = RequestContext.getCurrentContext();
            HttpServletRequest request = ctx.getRequest();
            logger.info("*************send {} request to {}",request.getMethod(),request.getRequestURL().toString());
            
            Map<String, String[]> map= request.getParameterMap();
            
            logger.info("请求request信息:【{}】",JSONObject.toJSONString(request.getParameterMap()));
            
            String[] token =  map.get("Token");
            
            if(null == token || token.length == 0){
                ctx.setSendZuulResponse(false);// 过滤该请求,不对其进行路由  
                ctx.setResponseStatusCode(200);// 返回错误码  
                ctx.setResponseBody("{"result":"token is not empty!","resultCode":"1001","resultMsg":"缺少授权的token值"}");// 返回错误内容  
                ctx.set("isSuccess", false);  
                
                HttpServletResponse response = ctx.getResponse();
                response.addHeader("Access-Control-Allow-Origin", "*");
                response.setContentType("application/json");
                response.setCharacterEncoding("UTF-8");
                response.setContentType("text/html;charset=UTF-8");
                response.setLocale(new java.util.Locale("zh","CN"));
                
            }else if(null != token && !"".equals(token[0]) &&  RedisClientServer.get(token[0]) != null && !"".equals(RedisClientServer.get(token[0]))) {// 如果请求的参数不为空,且值为chhliu时,则通过  
                ctx.setSendZuulResponse(true);// 对该请求进行路由  
                ctx.setResponseStatusCode(200);  
                ctx.set("isSuccess", true);// 设值,让下一个Filter看到上一个Filter的状态  
                RedisClientServer.expire(token[0], 3600);            
            }else{  
                ctx.setSendZuulResponse(false);// 过滤该请求,不对其进行路由  
                ctx.setResponseStatusCode(200);// 返回错误码  
                ctx.setResponseBody("{"result":"token is not correct!","resultCode":"1001","resultMsg":"token不存在或会话已过期!"}");// 返回错误内容  
                ctx.set("isSuccess", false);  
               
                HttpServletResponse response = ctx.getResponse();
                response.addHeader("Access-Control-Allow-Origin", "*");
                response.setContentType("application/json");
                response.setCharacterEncoding("UTF-8");
                response.setContentType("text/html;charset=UTF-8");
                response.setLocale(new java.util.Locale("zh","CN"));
            }  
            return null;  
            
        }

     *********************************************************************************************************************

    //主程序

    @EnableZuulProxy
    @SpringBootApplication
    public class GatewayZuulApplication {

        public static void main(String[] args) {
            SpringApplication.run(GatewayZuulApplication.class, args);
        }

        @Bean
        public PreRequestLogFilter preRequestLogFilter() {
            return new PreRequestLogFilter();
        }


    }

     *********************************************************************************************************************

  • 相关阅读:
    MyEclipse连接Oracle,出现ORA00604和ORA12705异常
    MyEclipse连接Oracle,出现ORA00604和ORA12705异常
    SSH Secure Shell Client 乱码问题
    android开发(20) 使用adb建立pc和android设备之间的连接。usb连接方式。
    android开发(22)使用正则表达式 。从一个字符串中找出数字,多次匹配。
    .net 中,使用c# 语言 ,执行exe程序。
    [转载]大数据存取的选择:行存储还是列存储?
    android开发(21)蜂鸣提示音和震动提示的实现。
    arcgis for android 学习 (8) 空间查询 点击某点,选中该点所在单位区域。
    android开发(24)使用SQLiteOpenHelper的onUpgrade实现数据库版本升级
  • 原文地址:https://www.cnblogs.com/wonder2636/p/7490319.html
Copyright © 2011-2022 走看看