25

文字列を返す RESTful Web サービスがあり、Java (JAX-WS) で記述されています。私の問題は、次のような URL でその Web サービスにリクエストを送信するときです。

http://localhost:8080/project/webservices/getlist/getListCustomers

コンソールでは、以下のエラー メッセージが表示されます。

XMLHttpRequest は URL オリジン localhost を読み込めません Access-Control-Allow-Origin で許可されていません

この問題をどのように処理できますか?

Java コード:

@GET
@Path("/getsample")
public Response getMsg() { 
    String output = "Jersey say : " ;   
    return Response.status(200).entity(output).build();
}
4

1 に答える 1

45

問題の CORS についてはこちらをお読みください: http://enable-cors.org/

これが getMsg() メソッドで役立つかどうかを確認してください。
return Response.ok(output).header("Access-Control-Allow-Origin", "*").build();

上記が機能しない場合は、Jersey フィルターをサービスに追加してみてください。フィルター クラスを作成します。

package your.package;

public class CORSFilter implements ContainerResponseFilter {

    @Override
    public ContainerResponse filter(ContainerRequest creq, ContainerResponse cresp) {

        cresp.getHttpHeaders().putSingle("Access-Control-Allow-Origin", "*");
        cresp.getHttpHeaders().putSingle("Access-Control-Allow-Credentials", "true");
        cresp.getHttpHeaders().putSingle("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, OPTIONS, HEAD");
        cresp.getHttpHeaders().putSingle("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With");

        return cresp;
    }
}

そして、後で win web.xml を次のように登録します。

<servlet>
<servlet-name>CORS Filter</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
 <init-param>
    <param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
    <param-value>your.package.CORSFilter</param-value>
 </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>CORS Filter</servlet-name>
    <url-pattern>/webservices/*</url-pattern>
</servlet-mapping>


もう 1 つの解決策は、リソース内でこのコードを使用OPTIONSしてブラウザーに提供することです。これを @GET があるクラスに入れます。

  @OPTIONS
  @Path("/getsample")
  public Response getOptions() {
    return Response.ok()
      .header("Access-Control-Allow-Origin", "*")
      .header("Access-Control-Allow-Methods", "POST, GET, PUT, UPDATE, OPTIONS")
      .header("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With").build();
  }


これでうまくいかない場合は、"*"提供された「Access-Control-Allow-Origin」ヘッダーを、このリソースにアクセスするカスタム ドメインと交換してみてください。Ig これを from から呼び出す場合は、アスタリスクの代わりに次のhttp://localhost::8080ようなものを使用します。("Access-Control-Allow-Origin", "http://localhost:8080")"*"

于 2013-08-14T15:38:59.497 に答える