当前位置: 首页 > 知识库问答 >
问题:

角形10和Spring防尘套1.5之间的CORS问题

涂泰平
2023-03-14

我只是无法解决我的角度10应用程序和Spring引导1.5之间的CORS问题。

我已经尽我所能尝试了一切,但仍然不起作用。我正在尝试设置一个全局CORS配置以允许一切

我目前的实现:

@Configuration
public class DevConfig {
    
    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**")
                    .allowedOrigins("http://localhost:4200")
                    .allowedHeaders("*");
            }
        };
    }
    
}

我在前端得到了这个:

Access to XMLHttpRequest at 'http://localhost:8080/test' from origin 'http://localhost:4200' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource

版本

<properties>
    <java.version>1.8</java.version>
    <commons-io.version>2.7</commons-io.version>
    <spring.version>1.5.9.RELEASE</spring.version>
</properties>

[编辑]

我将其改为:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.CorsConfigurationSource;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
    
import java.util.Arrays;
    
@Configuration
public class AppConfig {
    @Bean
    CorsConfigurationSource corsConfigurationSource()
    {
        CorsConfiguration configuration = new CorsConfiguration();
            configuration.setAllowedOrigins(Arrays.asList("http://localhost:4200"));
        configuration.setAllowedMethods(Arrays.asList("GET", "POST", "OPTIONS", "DELETE", "PUT", "PATCH"));
        configuration.setAllowedHeaders(Arrays.asList("X-Requested-With", "Origin", "Content-Type", "Accept", "Authorization"));
        configuration.setAllowCredentials(true);
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", configuration);
        return source;
    }
}

但还是不起作用

共有1个答案

赵开诚
2023-03-14

添加交叉原点(原点=”http://localhost:4200)中的方法或控制器级别。或者,

如果要添加全局配置,请在配置文件中配置此bean:

@Bean
CorsConfigurationSource corsConfigurationSource() 
{
    CorsConfiguration configuration = new CorsConfiguration();
    configuration.setAllowedOrigins(Arrays.asList("http://localhost:4200"));
    configuration.setAllowedMethods(Arrays.asList("GET", "POST", "OPTIONS", "DELETE", "PUT", "PATCH"));
    configuration.setAllowedHeaders(Arrays.asList("X-Requested-With", "Origin", "Content-Type", "Accept", "Authorization"));
    configuration.setAllowCredentials(true);
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    source.registerCorsConfiguration("/**", configuration);
    return source;
}

如果您使用的是spring security,那么应该添加配置。setAllowCredentials(真) 也在这里,不要忘记添加http。在Spring Security配置中的cors()。

编辑:

当浏览器发出跨域请求时,浏览器会添加带有当前源(方案、主机和端口)的Origin标头。在服务器端,当服务器看到此标头并希望允许访问时,它需要向响应添加Access-Control-Allow-Origin标头,指定请求源(或*以允许任何源。)。当浏览器看到此响应带有适当的Access-Control-Allow-Origin标头时,浏览器允许与客户端站点共享响应数据。

如果您的后端正在发送标头,这可能是Chrome不支持localhost通过Access-Control-Allow-Origin。要让Chrome在标头中发送Access-Control-Allow-Origin,只需将 /etc/hosts文件中的localhost别名到其他域,例如:

127.0.0.1   localhost yourdomain.com

然后,如果您使用yourdomain.com而不是localhost访问您的api,调用应该会成功。

如果问题仍然存在,则需要检查后端是否发送了任何标头。如果没有,则将其添加到响应标题中(这很糟糕)。让我知道到底发生了什么。

 类似资料:
  • 我正在尝试使用spring boot和hibernate。当我使用存储库时,它工作得很好,但我正在尝试使用Hibernate会话来创建DAO,而这个DAO不是事务的一部分。 这是测试代码: 应用Java语言 UserBusinessImpl。java: 用户存储库。Java语言 用户DAO: 当我尝试getCurrentSession()时,它抛出了一个错误。openSession()与我的事务分

  • 我在前端有一个应用程序,我使用角,后端我使用Spring Boot。在我的前端,我必须上传一个CSV文件,在表中插入数据。所以我将数据发送到保存它的后端。我的问题:我有一个类个人与关系@OneTo很多到其他类像comtes。所以当我尝试使用此Rest服务获取所有个人:http://localhost:8080/api/individus时,我有一个解析json数据错误。 这是我的班级个人: 公共类

  • 我有一个在8888端口上运行的Spring Boot后端应用程序和一个在4200端口上运行的Angular前端应用程序。 在我的Spring Boot应用程序中,我定义了以下bean来处理CORS: 我的配置如下所示: 通过这种配置,一切正常,我可以从Angular应用程序成功调用我的API。 但我想启用CSRF,所以我将安全配置更改为: 我在Angular应用程序中添加了以下: 问题是始终返回。

  • 我试图通过遵循这里的教程,使用Spring boot在Java中创建一个RESTful应用程序。我想修改它,以便可以从URL中提取标识符,并使用它来服务请求。 所以

  • 我知道对此有很多问题。但是,我仍然无法解决应用程序中的跨源块问题。我已经在Spring Boot应用程序中实现了所有的过滤器,但问题仍然存在。有人能指引我走向正确的道路吗? 角度应用-http://localhost:4200/auth Spring启动应用程序-http://localhost:8082/app1 主类 Cors过滤器类 控制器类 应用yml 角服务部件

  • 我目前正在开发一个以Spring Boot为后端的Angular 4应用程序。我使用Maven来构建如中所述配置的项目https://blog.jdriven.com/2016/12/angular2-spring-boot-getting-started/ 我现在想用其他语言翻译这个应用程序。我看着http://www.baeldung.com/spring-boot-international