J'ai Vuejs frontend et un contrôleur Webflux de démarrage à ressort. Maintenant, le navigateur se plaint de Cors lors du démarrage de printemps.
Pour activer Cors, j'ai essayé d'utiliser L'annotation @crossorigin telle que décrite ici: https://www.baeldung.com/spring-webflux- cors p> mais cela n'a pas aidé et d'une manière ou d'une autre, le ressort n'envoie pas les en-têtes Cors dans la réponse même avec l'annotation @crossorigin dans le contrôleur. P> i essayé avec le WebTestClient comme décrit dans le tutoriel Bealdung et confirme que l'en-tête n'est pas là: P> si je teste avec aucune idée desquelles la configuration de Cors comme décrit dans le lien ci-dessus ne fonctionne pas? J'ai également essayé de permettre à Cors de la configuration globale et de permettre à des cors avec une webfilter. Mais rien ne semble fonctionner. P> p> Accès à XMLHTTPQUEST à 'https: // ...' de l'origine 'https: // ...' a été bloqué par Cors Politique: la réponse à la demande de pré-lumière ne passe pas la vérification du contrôle d'accès: Aucune en-tête «Access-Control-Autory-Origin» est présente sur la ressource demandée. CODE> P>
réponse.extheader (" Access-Control-Autory-Origine "); code>
Je reçois: p>
3 Réponses :
dans le Javadocs du Webflux de Spring Web MVC et Spring Webfflux prennent en charge cette annotation à travers
la demande deappartHermermer dans leurs modules respectifs. le
Les valeurs de chaque type et de la paire d'annotations de niveau de méthode sont ajoutées
à une corsconfiguration p>
blockQuote> ce qui signifie que vos paramètres Cors seront ajoutés à Corsconfiguration p> Si vous utilisez la sécurité de printemps, vous devez de la Javadocs P> Ajoute un corsfilter à utiliser. Si un haricot par le nom de Corsfilter est
fourni, que Corsfilter est utilisé. Sinon si corsconfigurationverce est
défini, alors cette corsconfiguration est utilisée. Sinon, si le printemps mvc
est sur le pavé de classe d'un manuelIntrospector utile. P>
BlockQuote> Remarque, si vous envoyez des informations d'identification avec la demande (cookies), vous devez l'ajouter à vos paramètres de Cors P> @crossorigin code> Il y a mentionner
@CrossOrigin(allowCredentials = "true")
Merci beaucoup pour votre réponse. Après l'avoir lu attentivement et lisez aussi la documentation que j'ai toujours le même problème. En fait, je n'utilise pas la sécurité du printemps. Une dernière chose: exécuter le test donne également cette erreur: 2020-07-04 13: 44: 45.611 Erreur 17867 --- [Parallel-1] oswsadapter.httpwebhandleradapter: [38a66881] 500 Erreur de serveur pour HTTP GET " / CORS-Ending-EndPoint " Code>
Java.lang.illegalargumentException: la demande réelle ne doit pas être null code> Ce pourrait être la cause fondamentale, mais je ne trouve pas d'aide aux ressources sur Internet. Pouvez-vous aider?
@RICHART Assurez-vous de mettre Crossorigin sur exactement le même mappage de demande que vous envoyez la demande à. Si vous mettez Crossorigin sur GET "/ API / utilisateurs", les CORS ne seront activés que pour obtenir "/ API / utilisateurs". Vous pouvez également mettre Crossorigin sur le niveau du contrôleur, puis CORS sera disponible pour toutes les mappages de demande dans le contrôleur E.G. Post "/ API / utilisateurs" Obtenez "/ API / utilisateurs", etc. Et bien sûr, il dépendra des méthodes que vous avez autorisées dans la configuration de Cors dans le contrôleur.
La solution consistait à utiliser la configuration suivante pour le WebTestClient:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
Pour moi, ce qui a effectivement travaillé sans ajouter la dépendance de Spring-Starter-Web, c'était d'utiliser un filtre Web et une force de force si la méthode HTTP est @Configuration
public class CorsGlobalConfiguration implements WebFilter {
@Override
public Mono<Void> filter(ServerWebExchange serverWebExchange,
WebFilterChain webFilterChain) {
ServerHttpRequest request = serverWebExchange.getRequest();
ServerHttpResponse response = serverWebExchange.getResponse();
HttpHeaders headers = response.getHeaders();
headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, "*");
headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, "POST, GET, PUT, OPTIONS, DELETE, PATCH");
headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true");
headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, "*");
headers.add(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, "*");
headers.add(HttpHeaders.ACCESS_CONTROL_MAX_AGE, "18000L");
if (request.getMethod() == HttpMethod.OPTIONS) {
response.setStatusCode(HttpStatus.OK);
return Mono.empty();//HERE
}
return webFilterChain.filter(serverWebExchange);
}
}