3

Est-il possible de spécifier les origines de l'annotation @CrossOrigin via une variable d'environnement? Je veux faire ceci afin que je puisse utiliser la même base de code pour uat/staging/production. Je souhaite que mes environnements uat/staging soient accessibles via localhost pour les tests, mais que mes environnements de production n'acceptent que les demandes provenant d'un point de terminaison spécifique.Spécification de @CrossOrigin orgins via une variable d'environnement

Par exemple, il s'agit de notre utilisateur d'annotation d'origine croisée pour une nouvelle API;

@CrossOrigin(origins = {"http://localhost:9000", "http://example.com"}) 

Cela fonctionne très bien. En testant sur ma machine locale, seul un serveur Web fonctionnant sur le port 9000 pourrait accéder à mon API. Je me suis alors tenté de mettre ma variable d'environnement sur ma machine windows locale

ALLOWED_ORIGINS = http://localhost:9000,http://example.com 

J'ai ensuite changé l'annotation trop

@CrossOrigin(origins = "#{'${allowed.origins}'.split(',')}") 

Et maintenant, les demandes sont bloquées en raison de CORS.

Comme question de suivi. Puis-je définir le port comme un caractère générique? Pour que n'importe quel serveur web localhost puisse accéder à l'API?

MISE À JOUR

donc j'ai pu réaliser la première partie de ma question via - https://spring.io/blog/2015/06/08/cors-support-in-spring-framework#filter-based-cors-support

et définissant la variable d'env pour allowedOrigins()

@Value("#{'${allowed.origins}'.split(',')}") 
private List<String> allowedOrigins; 

Cependant, pour la vie de moi Je n'arrive pas à obtenir une forme de joker/pattern. J'ai essayé les deux ci-dessous comme variables d'environnement;

http://localhost:* 
http:\/\/localhost:[0-9]+ 

Je pourrais avoir à soulever cette question séparément.

Répondre

1

En fait non, les annotations sont traitées au moment de la compilation uniquement. Vous ne pouvez pas traiter ou fournir des données dynamiques. Les données de configuration doivent être fixes ou constantes.

Si vous utilisez XML pour configurer le ressort. Vous pouvez configurer le ressort en utilisant le code suivant.

<mvc:cors> 

    <mvc:mapping path="/api/**" 
     allowed-origins="http://domain1.com, http://domain2.com" 
     allowed-methods="GET, PUT" 
     allowed-headers="header1, header2, header3" 
     exposed-headers="header1, header2" allow-credentials="false" 
     max-age="123" /> 

    <mvc:mapping path="/resources/**" 
     allowed-origins="http://domain1.com" /> 

</mvc:cors> 

Source link

Il vous faut une autre configuration, vous devrez fournir votre propre filtre pour le traitement CORS, puis, il suffit de remplacer votre filtre CORS dans la chaîne de filtre.

+0

Je n'utiliserai pas de configuration basée sur xml. J'ai aussi besoin de faire correspondre les modèles pour autoriser tous les ports locaux, donc il semblerait que je devrais utiliser le filtre CORS si je comprends bien les choses. – Jags

+0

Utilisez-vous une configuration basée sur Java? – Paras

+0

Oui, je suis. - https://spring.io/blog/2015/06/08/cors-support-in-spring-framework#filter-based-cors-support est la façon dont j'ai réussi à le faire fonctionner. – Jags