Ich erhalte das folgende Problem, nachdem ich web.xml nach Java Config portiert habe
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:63342' is therefore not allowed access.
Basierend auf einigen Spring-Referenzen wurde der folgende Versuch versucht:
@Configuration
@ComponentScan(basePackageClasses = AppConfig.class, useDefaultFilters = false, includeFilters = {
@Filter(org.springframework.stereotype.Controller.class) })
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/*").allowedOrigins("*").allowedMethods("GET", "POST", "OPTIONS", "PUT")
.allowedHeaders("Content-Type", "X-Requested-With", "accept", "Origin", "Access-Control-Request-Method",
"Access-Control-Request-Headers")
.exposedHeaders("Access-Control-Allow-Origin", "Access-Control-Allow-Credentials")
.allowCredentials(true).maxAge(3600);
}
}
Die ausgewählten Werte wurden einem funktionierenden web.xml-Filter entnommen:
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.methods</param-name>
<param-value>GET,POST,HEAD,OPTIONS,PUT</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.headers</param-name>
<param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>
</init-param>
<init-param>
<param-name>cors.exposed.headers</param-name>
<param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
</init-param>
<init-param>
<param-name>cors.support.credentials</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>cors.preflight.maxage</param-name>
<param-value>10</param-value>
</init-param> </filter> <filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Irgendwelche Ideen, warum der Spring Java-Konfigurationsansatz nicht wie die Datei web.xml funktioniert?
quelle
addCorsMapping
hat bei mir nicht funktioniert, ich bin versucht zu sagen, dass dies auf die Sicherheit des Frühlings zurückzuführen ist. Das Hinzufügen einercorsConfigurationSource
Bohne, wie hier vorgeschlagen, hat mein Problem jedoch gelöst.Hilfreicher Tipp - Wenn Sie Spring Data Rest verwenden, benötigen Sie einen anderen Ansatz.
quelle
RepositoryRestConfigurerAdapter
ist veraltet. Implementiert einfachRepositoryRestConfigurer
direkt.Wir hatten das gleiche Problem und haben es mithilfe der folgenden XML-Konfiguration von Spring behoben:
Fügen Sie dies in Ihre Kontext-XML-Datei ein
quelle
Wenn Sie Spring Security Version> = 4.2 verwenden, können Sie die native Unterstützung von Spring Security verwenden, anstatt die von Apache einzuschließen:
Das obige Beispiel wurde aus einem Spring- Blogbeitrag kopiert, in dem Sie auch Informationen zum Konfigurieren von CORS auf einem Controller, zu bestimmten Controller-Methoden usw. finden. Darüber hinaus gibt es auch XML-Konfigurationsbeispiele sowie die Spring Boot-Integration.
quelle
Nach Omars Antwort habe ich in meinem REST-API-Projekt eine neue Klassendatei
WebConfig.java
mit der folgenden Konfiguration erstellt:Dadurch kann jeder Ursprung auf die API zugreifen und sie auf alle Controller im Spring-Projekt anwenden.
quelle
Omkars Antwort ist ziemlich umfassend.
Ein Teil des globalen Konfigurationsteils hat sich jedoch geändert.
Gemäß der Referenz zum Federmanschetten 2.0.2.RELEASE
Die meisten Antworten in diesem Beitrag verwenden
WebMvcConfigurerAdapter
jedochDer Typ WebMvcConfigurerAdapter ist veraltet
quelle
Ich hatte auch Nachrichten wie
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:63342' is therefore not allowed access.
Ich hatte cors richtig konfiguriert, aber was im Webflux in RouterFuncion fehlte, war Accept und Content-Type-Header APPLICATION_JSON wie in diesem Code:
quelle
Wie @Geoffrey betonte, benötigen Sie bei Spring Security einen anderen Ansatz als hier beschrieben: Spring Boot Security CORS
quelle
Wenn aus irgendeinem Grund immer noch jemand nicht in der Lage ist, CORS zu umgehen, schreiben Sie den Header, über den der Browser auf Ihre Anfrage zugreifen möchte.
Fügen Sie diese Bean in Ihre Konfigurationsdatei ein.
Auf diese Weise können wir dem Browser mitteilen, dass wir Cross-Origin von allen Ursprüngen zulassen. Wenn Sie einen bestimmten Pfad einschränken möchten, ändern Sie das "*" in {' http: // localhost: 3000 ', ""}.
Hilfreiche Referenz zum Verständnis dieses Verhaltens https://www.concretepage.com/spring-4/spring-4-rest-cors-integration-using-crossorigin-annotation-xml-filter-example
quelle
Ich habe die Lösung im Frühjahrsstart mithilfe der Annotation @CrossOrigin gefunden .
quelle
öffentliche Klasse TrackingSystemApplication {
quelle