In unserer Spring Boot App haben wir die erste Implementierung in unserer Quality-Umgebung vorgenommen. Jetzt möchten wir es einfacher machen, URLs für die Annahme von Petitionen aus unserer FrontEnd-Anwendung zu definieren.Wie behandelt man CORS-URLs in Prod/Dev-Umgebungen?
Wir bauen unsere Anwendung mit Maven und wir es dann mit dem Befehl ausführen
java -Dspring.profiles.active=prod -jar myapp-0.0.1-SNAPSHOT.jar
Wir dachten, dass wir die URL auf der application.properties/application-prod.properties
Datei einstellen könnten, aber das funktioniert nicht wie in der Ausführungszeit es null ist. Eine andere Problemumgehung wäre irgendwie, den Parameter -Dspring.profiles.active=prod
zu erhalten, den wir beim Ausführen der Anwendung passieren und dann eine URL oder eine andere URL nehmen, aber das scheint ein bisschen dreckig zu sein ...
Also, was würdest du tun? Ich war beeindruckt, dass ich bei Google nichts gefunden habe. Offensichtlich haben die Leute unterschiedliche Problemumgehungen oder ich suche auf die falsche Weise.
bearbeiten Kreuz Herkunft Info: Dies ist, wie wir es auf den ersten umgesetzt.
@CrossOrigin(origins = BasicConfiguration.CLIENT_URL)
Und das ist, wie wir es jetzt mit einem Filter mit Spring Security
public class CorsFilter implements Filter, ApplicationContextAware {
@Value("${urlServer}")
private String urlServer;
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", urlServer);
response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE, PATCH");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
response.setHeader("Access-Control-Expose-Headers", "Location");
chain.doFilter(req, res);
}
@Override
public void init(FilterConfig filterConfig) {}
@Override
public void destroy() {}
}
Natürlich tun wollen urlServer in application.properties mit seinen entsprechenden Metadaten definiert ist.
EDIT 2 Wie ich den Filter initialisieren:
@Bean
public FilterRegistrationBean corsFilter() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new CorsFilter());
registration.addUrlPatterns("/sessionLogin");
return registration;
}
können Sie Ihren Code teilen, wo CORS Urls gesetzt wird ? Eigentlich sollte es perfekt mit application.properties funktionieren und das ist der richtige Weg zu tun – Leffchik
https://stackoverflow.com/questions/44797127/spring-remove-printout-could-not-load-properties-from-url/44797337# comment76575201_44797337 So können Sie Eigenschaften aus externen Dateien definieren, die die von application.properties überschreiben. – StanislavL
Wie erstellen Sie Ihr CorsFilter-Objekt? Ich schätze, Sie erstellen es einfach wie 'new CorsFilter()', also ist es keine Frühlingsbohne und es wird nicht vom Frühlingskontext verwaltet. Deshalb kann Ihre Eigenschaft nicht injiziert werden – Leffchik