zoukankan      html  css  js  c++  java
  • Spring cloud zuul跨域(二)

    使用  CorsFilter  解决ajax跨域问题

    直接在zuul的main下面,创建corsFilter就可以了。

     
     
    @SpringBootApplication
    @EnableZuulProxy
    @EnableFeignClients
    @ComponentScan(basePackages={"xxx"},lazyInit=true)
    @ServletComponentScan(basePackages={"xxx"})
    public class ZuulApp 
    {
        public static void main( String[] args )
        {
            SpringApplication.run(ZuulApp.class, args);
            
        }
     
        @Bean
        public CorsFilter corsFilter() {
            final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
            final CorsConfiguration config = new CorsConfiguration();
            //允许跨域
            config.setAllowCredentials(true);
            //允许向该服务器提交请求的URI,*表示全部
            config.addAllowedOrigin("*");
            //允许访问的头信息,*表示全部
            config.addAllowedHeader("*");
            //允许的method
            config.addAllowedMethod("OPTIONS");
            config.addAllowedMethod("HEAD");
            config.addAllowedMethod("GET");
            config.addAllowedMethod("PUT");
            config.addAllowedMethod("POST");
            config.addAllowedMethod("DELETE");
            config.addAllowedMethod("PATCH");
            //免检时间,单位是秒
            //config.setMaxAge(3600)
            //Enabling CORS for the whole application
            source.registerCorsConfiguration("/**", config);
            return new CorsFilter(source);
        }
     
        
    }

    这里看一下 prefilter 和 postfilter

    @Component
    public class PreFilter extends ZuulFilter {
        public PreFilter() {
            super();
        }
     
        @Override
        public String filterType() {
            return FilterConstants.PRE_TYPE;
        }
     
        @Override
        public int filterOrder() {
            return 0;
        }
     
        @Override
        public boolean shouldFilter() {
            return true;
        }
     
        @Override
        public Object run() {
     
            RequestContext ctx = RequestContext.getCurrentContext();
            HttpServletRequest request = ctx.getRequest();
     
            String requestUrl = request.getRequestURL().toString();
            String requestUri = request.getRequestURI();
            String zuul = requestUrl.substring(0,requestUrl.indexOf(requestUri)); // zuul根路径
            ctx.addZuulRequestHeader("zuul", zuul);
     
            return null;
        }
        
        
        
    }
    @Component
    public class PostFilter extends ZuulFilter {
        protected static final String SEND_ERROR_FILTER_RAN = "sendErrorFilter.ran";
     
        @Override
        public String filterType() {
            return FilterConstants.POST_TYPE;
        }
     
        @Override
        public int filterOrder() {
            return -1;
        }
     
        @Override
        public boolean shouldFilter() {
            return true;
        }
     
        @Override
        public Object run() {
     
            return null;
        }
    }

    结束语:解决了跨域和网页提交问题。但是https访问据说会出现问题,我还没有测试

  • 相关阅读:
    最清晰易懂的Mysql CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP区别
    yield再理解--绝对够透彻
    解决pyspider框架web预览框过小问题
    python中的可哈希与不可哈希
    python json.dumps 中的ensure_ascii 参数引起的中文编码问题
    LeetCode 297. 二叉树的序列化与反序列化 | Python
    LeetCode 1300. 转变数组后最接近目标值的数组和 | Python
    LeetCode 30. 串联所有单词的子串 | Python
    LeetCode 739. 每日温度 | Python
    LeetCode 128. 最长连续序列 | Python
  • 原文地址:https://www.cnblogs.com/hanjun0612/p/10791619.html
Copyright © 2011-2022 走看看