zoukankan      html  css  js  c++  java
  • spring boot 跨域请求

    场景

    网站localhost:56338要访问网站localhost:3001的服务

    在网站localhost:3001中增加CORS相关Java Config

    @Configuration
    @Order(Ordered.HIGHEST_PRECEDENCE)
    public class CORSConfiguration {
        @Bean
        public WebMvcConfigurer corsConfigurer() {
            return new WebMvcConfigurerAdapter() {
                @Override
                public void addCorsMappings(CorsRegistry registry) {
                    registry.addMapping("/**")
                            .allowedHeaders("*")
                            .allowedMethods("*")
                            .allowedOrigins("*")
                            .allowCredentials(true)
                            .maxAge(3600);
                }
            };
        }
    }
    

    在网站localhost:56338中测试

    @section Scripts{ 
        <script>
            $.ajax({
                method: "GET",
                url: "http://localhost:3001/api/project/getProjectInfo/50",
                headers: {
                    'x-auth-token':'5136E8DD7D4AFCA77FDA3A4B4541A7FB88609FCFF1C0E9C2BC0060A3DBBB14E08F9B107336A218A62C247618BBF759312653BD70E4CEDAE86D285C8D459490728B008383929E8262CB40C9B0E8C841F3531E61F01FE71A937820176D45D348CE7C375D7020B8191A0190C46A318859C6'
                },
                xhrFields: {
                    withCredentials: true
                }
            }).done(function (resp) {
                console.log(resp);
            }).fail(function () {
    
            }).always(function () {
    
            });
        </script>
    }
    

    备注

    1. 在使用过程中发现,有时可能不能正常实现跨域,原因是spring bean注册顺序的问题,所以一定要在配置上增加 @Order(Ordered.HIGHEST_PRECEDENCE), 保证它优先注册。
    2. 如果客户端需要带上cookie,需要增加withCredentials, vuejs, angularjs,ractjs上的设置方法要进一步研究一下。

    参考资料

    完整的WebConfig代码

    @Configuration
    @Order(Ordered.HIGHEST_PRECEDENCE)
    public class WebConfig extends WebMvcConfigurerAdapter {
    
        @Autowired
        private AuthorizationInterceptor authorizationInterceptor;
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(authorizationInterceptor);
        }
    
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/static/**")
                    .addResourceLocations("classpath:/static/");
        }
    
    //    @Bean
    //    public FilterRegistrationBean corsFilter() {
    //        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    //        CorsConfiguration config = new CorsConfiguration();
    //        config.setAllowCredentials(true);
    //        config.addAllowedOrigin("*");
    //        config.addAllowedHeader("*");
    //        config.addAllowedMethod("*");
    //        config.setMaxAge(3600L);
    //        source.registerCorsConfiguration("/api/**", config);
    //        FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
    //        // 这个顺序很重要哦,为避免麻烦请设置在最前
    //        bean.setOrder(0);
    //        return bean;
    //    }
    
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/api/**")
                    .allowedOrigins("*")
                    .allowedMethods("GET", "POST", "OPTIONS")
                    .allowedHeaders("*")
                    .allowCredentials(true)
                    .maxAge(3600);
        }
    
    }
    

    “年轻人不要怕表现,要敢于出来表现,但还是那句话,要有正确的度,你的表现是分析问题和解决问题的能力。”

    – 《你凭什么做好互联网》

  • 相关阅读:
    ccc pool
    ccc 模拟重力 正太分布
    ccc 正态分布
    ccc this 指针
    基本语法HelloWorld
    css选择器
    css基本语法
    表单
    表格
    超链接
  • 原文地址:https://www.cnblogs.com/fuhongwei041/p/7590425.html
Copyright © 2011-2022 走看看