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

  • 相关阅读:
    CodeBlocks背景主题的设置
    Win7更改默认打开方式失败
    BAT命令介绍【转自Internet】
    Index of my articles
    一个表格说明RelativeLayout中的几个重要属性【Written By KillerLegend】
    有史以来最简单的三层实例(C#) ——转载自CSDN
    银联规定的MAC算法_转载
    Windows下ORACLE 10g安装与操作图解
    Oracle 在64位机器上使用PLSQL连接Oracle的问题(SQL * NET not properly installed)转载
    Linux系统下JDK和Tomcat安装配置
  • 原文地址:https://www.cnblogs.com/hanjun0612/p/10791619.html
Copyright © 2011-2022 走看看