我试图在Java/Spring中的Angular前端和RESTendpoint之间建立连接(我没有开发,也不太清楚)。通过GET,一切正常。通过POST,我在终端中收到消息
已被CORS策略阻止:对预检请求的响应未通过权限改造检查:请求的资源上不存在“访问控制允许源”标头。
在开发工具的网络选项卡中,OPTIONS方法出现错误403
Request Method: OPTIONS
Status Code: 403
Remote Address: xx.xx.xx.xx:xxxx
Referrer Policy: strict-origin-when-cross-origin
所以,我在互联网上搜索了几次后发现了这种情况,原因是CORS设置:通常,在这种情况下,在帖子之前会发送一个选项调用;但是,由于CORS的原因,不允许进行期权认购。所以,我试着在我的控制器上设置这一行
@CrossOrigin(origins = "*", methods = {RequestMethod.OPTIONS, RequestMethod.GET, RequestMethod.POST, RequestMethod.PUT, RequestMethod.DELETE})
这次错误改变了
Multiple CORS header 'Access-Control-Allow-Origin' not allowed
But the code I added is the only similar to @CrossOrigin, I dind't found others similar.
因此,在根据后CORS问题-没有'访问控制允许源'头存在于请求的资源,我尝试了以下解决方案:
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedMethods("HEAD", "GET", "PUT", "POST", "DELETE", "PATCH");
}
}
和
@Configurathtml" target="_blank">ion
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
// http.csrf().disable();
http.cors();
}
@Bean
public CorsConfigurationSource corsConfigurationSource() {
final CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(ImmutableList.of("*"));
configuration.setAllowedMethods(ImmutableList.of("HEAD",
"GET", "POST", "PUT", "DELETE", "PATCH"));
// setAllowCredentials(true) is important, otherwise:
// The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'.
configuration.setAllowCredentials(true);
// setAllowedHeaders is important! Without it, OPTIONS preflight request
// will fail with 403 Invalid CORS request
configuration.setAllowedHeaders(ImmutableList.of("Authorization", "Cache-Control", "Content-Type"));
final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
}
}
但这一次,我在控制台中看到的错误变成了
已被CORS策略阻止:“Access Control Allow Origin”标头包含多个值“*,*”,但只允许一个值。
所以,这是我达到的最后一点。我如何解决关于多个值的最后一个错误?每次我处理这个问题,我都提前一步,错误会改变,但它仍然存在。
只需将此添加到您的WebSecurity配置适配器
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
/*@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedMethods("HEAD", "GET", "PUT", "POST", "DELETE", "PATCH");
}*/ not needed
@Override
protected void configure(HttpSecurity http) throws Exception {
http
// by default uses a Bean by the name of corsConfigurationSource
.cors(withDefaults())
...
}
@Bean
CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(Arrays.asList("https://localhost:5000"));// if your front end running on localhost:5000
configuration.setAllowedMethods(Arrays.asList("GET","POST"));
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
}
}
确保除了上面的代码之外,您没有任何其他过滤器或cors注释
Spring Security留档中的Spring CORS部分。
如果您没有使用Spring Security:
java prettyprint-override">package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry
.addMapping("/**")
.allowedOrigins("*","http://localhost:5000");// list all domains
}
};
}
}
问题内容: 我正在尝试将获取请求发送到api,就像它是登录网址 我在控制台中收到此错误 XMLHttpRequest无法加载http://demo.software.travel/gptp/api/authorization?apiKey= *&alias = &login = &password = *。“ Access-Control-Allow- Origin”标头包含多个值“ http:/
问题内容: 我有一个带有PHP的NGINX服务器(假设主机名为http://myserver.com)。我有一个PHP脚本,可以从本地主机上的网页通过XHR访问。我将其用作类似于freegeoip.net的GeoIP服务器。 我正在尝试将XHR锁定到特定域。 这是我的配置设置: 我遇到的问题是,当我执行XHR请求时,出现以下错误: 在配置文件中,我只有一个调用,那么为什么会有多个值?有没有办法可以
我试图将get请求发送到api,就像它是一个登录url一样 请求标题:
我试图通过angular以表单形式发布信息,但出现以下错误: 访问位于“”的XMLHttpRequesthttp://localhost:8000/api/register“起源”http://localhost:4200'已被CORS策略阻止:'Access Control Allow Origin'标头包含多个值'*,*',但只允许一个值。登记组成部分ts:43 HttpErrorRespon
嗨,我有相当不错的python和java知识,我最近决定在我的编程方面取得进一步的进步,就是创建我自己的语言,以便在我需要的时候使用和操作。我为eclipse安装了javacc插件,并浏览了一些教程。 我的问题是,当我创建一个新项目(文件 静态=假; “令牌上的语法错误,请删除这些令牌” Eclipse对除类名之外的所有内容都这样做,请注意,项目下的javacc模板没有错误。 请帮我找到一个解决方
问题内容: 我想使我的网站一次只允许一个会话。例如,假设用户已经登录到我在firefox上的网站,如果该用户再次登录到另一台浏览器(例如同一台计算机或另一台计算机上的Opera),则Firefox上的会话将被破坏。但是,如果仍为一届会议,则有关Firefox的会议仍将保留。我可以知道该怎么做吗?我正在使用php和apache。谢谢。 问候。本杰明 问题答案: 我建议您做这样的事情: 假设用户“ A