Sie müssen die Liste der Server nicht vorher wissen, da Sie festlegen können, dies ist jedoch nicht so sicher, da es anderen Websites ermöglicht, Ihre Dienste zu nutzen. Achten Sie also beim Erstellen Ihrer Header darauf, dass Sie Access-Control-Allow-Origin von einer eingeschränkten Liste zulassen. Ich verwende nur einen regulären Ausdruck, um zu vergleichen, da wir von mehreren erlauben. Wenn ich verifiziere, dass es eine Übereinstimmung gibt, gebe ich den Ursprung der Anfrage in der Kopfzeile zurück. Also, wenn ich auf etwas wie web.*energydomain.com
übereinstimmen und der Ursprung ist , dann gebe ich zurück Access-Control-Allow-Origin: webservices.energydomain.com
Das sagt dem rufenden Dienst (und jedem, der zuhört), dass ich von diesem Ursprung und nur diesem Ursprung akzeptiere, selbst wenn ich von webstart.energydomain annehmen könnte. com.
Also mit Feder haben wir einen Filter erstellt.
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class CORSFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
response.setHeader("Access-Control-Allow-Credentials", "true")
//If this is a pre-flight request, make sure that we are allowing them
if ("OPTIONS" == request.method) {
response.setHeader("Access-Control-Allow-Methods", "GET, PUT, POST, DELETE, OPTIONS")
response.setHeader("Access-Control-Max-Age", "604800")
response.setHeader("Access-Control-Allow-Headers", "Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Allow-Origin, Vary, Cookie, Key")
//Check to see that the referrer/origin matches the set of allowed origins in the application configuration
String referrer = request.getHeader("Origin")
if (referrer?.matches(ServerProperties.instance.accessControlAllowOriginRegEx)) {
response.setHeader("Access-Control-Allow-Origin", referrer)
}
} else {
//set other headers here and continue chain (we don't bother continuing chain on preflight)
chain.doFilter(request, response)
}
}
Sie können dies auch auf .htaccess tun
<FilesMatch "\.(ttf|otf|eot|woff)$">
<IfModule mod_headers.c>
SetEnvIf Origin "http(s)?://(www\.)?(webservices.energydomain.com|webservicesmo.energydomain.com|webservicestest.energydomain.com)$" AccessControlAllowOrigin=$0
Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
</IfModule>
</FilesMatch>
ich lieber versuchen, den Preflight Verkehrslärm zu reduzieren und sie alle zusammen zu vermeiden. Insbesondere verwende ich xdomain. Es war ziemlich einfach für mich einzurichten, wenn Sie eckig oder jQuery verwenden. Fügen Sie auf Ihrem Anwendungsserver eine proxy.html hinzu, wie in der Hilfe auf dem folgenden Link angegeben. Fügen Sie einige Tags hinzu, die sich auf die js-Dateien auf Ihrem "Client" und Viola beziehen, keine weiteren Vor-Flights. Dies wird in einen iFrame eingefügt, um die Notwendigkeit einer Korskontrolle zu vermeiden. Sie können die Ursprünge wie bei den CORS-Preflights, wie oben erklärt, immer noch steuern, sie werden nur vermieden.
https://github.com/jpillora/xdomain
warum die down-stimme? Wenn Sie nach unten abstimmen, lassen Sie mindestens einen Kommentar – treefrog
Einverstanden. Bring dich wenigstens auf Null zurück. Es ist wahrscheinlich, dass deine Frage ziemlich breit ist. Beantworten kann es weiter und weiter und weiter ... – Chewy
Es ist auch ziemlich meinungs basiert. Es hat auch ungefähr 0 Forschung getan. – csmckelvey