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访问据说会出现问题,我还没有测试

  • 相关阅读:
    Sql诊断之Explain
    Cenos7安装docker环境以及docker-compose
    uniapp苹果内购获取不到苹果的iap支付通道
    iOS云打包如何设置通用链接等Capabilities配置
    iOS应用id,套装id,appid,BundleID申请教程
    利用Appuploader在window上申请IOS开发所需要的证书及描述文件
    浅析GET和POST请求的本质区别以及关于get请求的长度限制到底是多少的问题
    iOS苹果开发者组织账号申请时的坑
    apache开源项目--HIVE
    [Unit testing Java] Unit testing Junit Controller
  • 原文地址:https://www.cnblogs.com/hanjun0612/p/10791619.html
Copyright © 2011-2022 走看看