Ich habe Rest Web-Dienste mit Spring implementiert. Wenn ich es in Eclipse als Spring Boot-Anwendung bereitgestellt habe, funktioniert es. Wenn ich es jedoch in Tomcat 7 auf demselben Computer installiert habe, funktioniert es nicht. Die Fehlermeldung lautet wie folgt:Rest-Service funktioniert, wenn in Eclipse, aber nicht in Tomcat
XMLHttpRequest cannot load http://localhost:8080/ristoreService/oauth/token. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://127.0.0.1:8081' is therefore not allowed access.
Meine CORS-Filter wie folgt aussehen:
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class CORSFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "http://127.0.0.1:8081");
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With, remember-me, "
+ "Origin,Access-Control-Request-Method, Access-Control-Request-Headers, Authorization");
if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
response.setStatus(HttpServletResponse.SC_OK);
} else {
chain.doFilter(req, res);
}
}
Wenn ich response.setHeader("Access-Control-Allow-Origin", "http://127.0.0.1:8081");
auf Kommentar, ich immer noch die gleichen Fehler. Ohne diese Zeile würde es auch dann nicht funktionieren, wenn ich es in Eclipse deploye. Warum verhält es sich anders, wenn es in einer anderen Umgebung auf der gleichen IP bereitgestellt wird?
EDIT: ich die URL http://localhost:8080/ristoreService/oauth/token
mit Rest-Client-Tester „CocoaRestClient“ getestet und bekam 404. Also machte ich eine URL auf, die anscheinend nicht http://localhost:8080/xxxxx
existiert und es in UI (AngularJS) laufen und bekam wieder die CORS Fehler. Ich denke der Fehler ist irgendwie irreführend, es ist immerhin ein 404. Aber wieso klagt es nicht, als der Krieg mit dem Namen ristoreService.war unter Webapps in Tomcat erfolgreich eingesetzt wurde?
bezogen werden: http://stackoverflow.com/questions/1653308/access-control-allow-origin-multiple-origin- Domänen – Kadima
Was ist der Fehler? – Ulises
@Ulises Erwähnt in meinem Beitrag 'Antwort auf Preflight-Anfrage nicht übergeben Kontrolle der Zugangskontrolle: Keine 'Access-Control-Allow-Origin'-Header ist auf der angeforderten Ressource vorhanden. Origin 'http://127.0.0.1:8081' ist daher nicht erlaubt. " – ddd