0

しばらく検索しても、まだ答えが見つかりません。私の問題は、Web サービス関数 setRequestHeader を呼び出すと、「Access-Control-Allow-Origin で許可されていません」というエラーが表示されることです。

ここに私のJavaScriptコードがあります:

var loginController = new sap.ltst.login.loginController({controllerName: "sap.ltst.login.loginController"});
var session = loginController.login("I051486", "123456789");
var config = {};
$.ajax({
    beforeSend: function(req) {
        req.setRequestHeader('Authentication', 'Authentication-Token ' + session.session_token);
    },
    url : "http://localhost:8081/com.sap.st.gtpapi/program/"
            + this.program + "/configs",
    dataType : 'json',
    type : 'GET',
    async : false,
    success : function(data) {
        config = data;
    }
});
return config;

Web サービス側では、認証を有効または無効にできる機能があります。認証をfalseに設定して(認証をチェックしないで)setRequestHeaderを削除しようとしましたが、エラーは発生せず、Webサービスはデータを返しました。

別の方法で元に戻そうとしたところ、エラーが発生しました。

 XMLHttpRequest cannot load http://localhost:8081/gtpapi/program/Business%20Intelligence%20platform%204.1%20(BI%20Aurora%204.1)/configs. Origin http://localhost:8080 is not allowed by Access-Control-Allow-Origin. 

したがって、Webサービス側では認証検証を無効にしているため、認証の問題ではないと思います。

Web サービス側に移りましょう。これがインターフェースです。

    public static final String HEADER_AUTH_TOKEN = "Authentication-Token";
    @GET
    @Consumes({MediaType.APPLICATION_JSON})
    @Produces({MediaType.APPLICATION_JSON})
    @Path("/guid_{planId}/packages/{packId}/{results}")
    public Response setPackageResult(@PathParam("planId") final String planGuid,    @PathParam("packId") final String packGuid, @PathParam("results") final String results, @HeaderParam(WebServiceBase.HEADER_AUTH_TOKEN) String token);

これは、Chrome でのヘッダー レスポンスとリクエストです。

Request       URL:http://localhost:8081/com.sap.st.gtpapi/program/SBOP%20EXPLORER%204.1/configs
Request Method:OPTIONS
Status Code:200 OK
Request Headersview source
Accept:*/*
Accept-Charset:UTF-8,*;q=0.5
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8,fr;q=0.6
Access-Control-Request-Headers:accept, authentication, origin
Access-Control-Request-Method:GET
Cache-Control:no-cache
Connection:keep-alive
Host:localhost:8081
Origin:http://localhost:8080
Pragma:no-cache
Referer:http://localhost:8080/LTST_Frontend/index.html
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31
Response Headersview source
Allow:GET,OPTIONS,HEAD
Content-Length:0
Content-Type:text/xml
Date:Fri, 02 Aug 2013 15:44:10 GMT
Server:Apache-Coyote/1.1

問題が javaScript によるものなのか Web サービスによるものなのか、間違いを犯したかどうかはわかりません。何か案は?

4

1 に答える 1