微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Java Config 的全局 CORS 配置在 Spring MVC

如何解决使用 Java Config 的全局 CORS 配置在 Spring MVC

我正在尝试为我在项目中开发的所有 Rest API 全局启用 CROS,同样我也尝试过这样做 使用 Java Config 进行全局 CORS 配置。 以下是带有@Configuration注解的配置类。

package com.fs;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

/**
 *
 * @author 
 */
@Configuration
@ComponentScan("com.fs")
@EnableWebMvc
public class AppConfig extends WebMvcConfigurerAdapter 
{
    @Override
    public void addCorsMappings(CorsRegistry registry) {
           
      registry.addMapping("/**")
          .allowedOrigins("http://localhost:3000")
          .allowedMethods("POST","GET","PUT","OPTIONS","DELETE")
          .allowedHeaders("X-Auth-Token","Content-Type")        
          .maxAge(4800);
    }
}

现在,我正在尝试使用 AX 从在 https://localhost:3000 上运行的 React 应用程序点击以下 API,但它不提供响应并产生网络错误

从源 'http://localhost:3000' 访问 XMLHttpRequest at 'http://localhost:8089/ewamftrxnsws/purchase/getSchemeList' 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。

let requestUrl = "http://localhost:8089/ewamftrxnsws/purchase/getSchemeList";
let promiseResponse = axios.post(requestUrl,{
        headers: {'Content-Type': 'application/json',}
       });
    promiseResponse.then(res=>{
        let isSuccess = res.data;
}).catch( error =>{
        console.log( "MFSchemeListApi catch => "+error);        
    });

有什么问题?谢谢。

解决方法

来自:https://spring.io/blog/2015/06/08/cors-support-in-spring-framework

如果您使用的是 Spring Security,请确保在 Spring Security 级别启用 CORS 以允许它利用在 Spring MVC 级别定义的配置。

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors().and()...
    }
}
,

该问题可能是因为已弃用的 "WebMvcConfigurerAdapter " 。尝试使用“WebMvcConfigurer”。

@Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {

        registry.addMapping("/**")
                .allowedOrigins(
                        "http://localhost:3000",..)
                .allowedMethods("GET","POST","PUT","DELETE","HEAD")
                .allowCredentials(true)
        ;
    }

}

这应该将“Access-Control-Allow-Credentials”标头带回请求中。

希望这能解决您的问题。试试看!!!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?