2017-03-01 1 views
2

Ich versuche, das folgende Problem seit mehr als 10 Tagen zu beheben. Ich habe alle Führer und Seiten von dieser Seite ohne Lösung gerötet. Ich entwickelte einen REST Web Server mit Jersey Bibliothek in Java. Das Ergebnis des Dienstes ist im JSON-Format. In meinem Server füge ich die CORSOrigin ist nicht erlaubt von Access-Control-Allow-Origin ohne Lösung

SERVER

package server; 

import java.io.IOException; 
import javax.ws.rs.container.ContainerRequestContext; 
import javax.ws.rs.container.ContainerResponseContext; 
import javax.ws.rs.container.ContainerResponseFilter; 

public class CORSFilter implements ContainerResponseFilter { 

    @Override 
    public void filter(final ContainerRequestContext requestContext, 
         final ContainerResponseContext cres) throws IOException { 
     cres.getHeaders().add("Access-Control-Allow-Origin", "*"); 
     cres.getHeaders().add("Access-Control-Allow-Headers", "origin, content-type, accept, authorization"); 
     cres.getHeaders().add("Access-Control-Allow-Credentials", "true"); 
     cres.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD"); 
     cres.getHeaders().add("Access-Control-Max-Age", "1209600"); 
    } 

} 

filtern und die web.xml ist:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns="http://xmlns.jcp.org/xml/ns/javaee"  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee  http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> 
    <display-name>conferenceServer</display-name> 
    <welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
    <welcome-file>index.htm</welcome-file> 
    <welcome-file>index.jsp</welcome-file> 
    <welcome-file>default.html</welcome-file> 
    <welcome-file>default.htm</welcome-file> 
    <welcome-file>default.jsp</welcome-file> 
    </welcome-file-list> 

    <servlet> 
     <servlet-name>Jersey REST Service</servlet-name> 
     <servlet- class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>jersey.config.server.provider.packages</param-name> 
      <param-value>server</param-value> 
     </init-param> 

     <init-param> 
      <param- name>javax.ws.rs.container.ContainerResponseFilter</param-name> 
      <param-value>server.CORSFilter</param-value> 
     </init-param> 

     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Jersey REST Service</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 

</web-app> 

Die JSON Formatierer der Antwort ist gültig, aber wenn ich den Dienst rufen In meiner App erhalte ich diesen Fehler:

[Error] Failed to load resource: Origin http://localhost:8100 is not allowed by Access-Control-Allow-Origin. (all, line 0) 
[Error] XMLHttpRequest cannot load http://****/myServer/service. Origin http://localhost:8100 is not allowed by Access-Control-Allow-Origin. 

In Ihnen r Meinung, wo ist das Problem?

+0

Ihre XML ist nicht gültig '' registrieren -> '' lin

+0

es ist ein Copy-Paste-Fehler. es ist nicht in meinem Programm – user5591980

Antwort

0

ich das nicht glaube, arbeitet als param-name

<param-name>javax.ws.rs.container.ContainerResponseFilter</param-name> 

Zwei Dinge, die Sie auszukommen sicher, dass der Filter registriert ist:

  1. hinzufügen @Provider oben auf dem Filter Klasse. Der Init-Parameter

    jersey.config.server.provider.packages 
    

    wird sicherstellen, dass es von der Paketsuche aufgenommen und registriert wird.

  2. Verwenden Sie die init-param ...classnames den Filter

    <init-param> 
        <param-name>jersey.config.server.provider.classnames</param-name> 
        <param-value>server.CORSFilter</param-value> 
    </init-param> 
    
+0

Ich habe nur Ihre Korrekturen vorgenommen, aber der Fehler wird nicht korrigiert. Wie kann ich sicherstellen, dass es sich um einen SERVER-seitigen Fehler handelt (und damit ein Problem, das CORS-Filter falsch gesetzt hat) und nicht CLIENT-seitig? – user5591980

+0

10 wird der Filter aufgerufen? –

+0

wie soll ich das überprüfen? – user5591980

Verwandte Themen