簡體   English   中英

GWT RequestBuilder setHeader無法正常工作

[英]GWT RequestBuilder setHeader not working

我正在嘗試使用以下類連接到OAuth2服務器實現(為完整起見,請完整發布):

import com.google.gwt.http.client.*;
import com.googlecode.gwt.crypto.bouncycastle.util.encoders.Base64;

import java.util.Map;
import java.util.function.Consumer;

public class HttpManager {

    private static String toFormData(Map<String, String> data) {

        StringBuilder sb = new StringBuilder();

        for (Map.Entry<String, String> entry : data.entrySet())
            sb.append("&")
                    .append(entry.getKey())
                    .append("=")
                    .append(entry.getValue());

        sb.deleteCharAt(0);
        return sb.toString();
    }

    public void postFormData(String url, Map<String, String> data, Consumer<Response> onSuccess, Consumer<Response> onFail) throws RequestException {

        final String dataAsString = toFormData(data);
        RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, url);
        builder.setHeader("Content-Type", "application/x-www-form-urlencoded");
        builder.setHeader("Accept", "application/x-www-form-urlencoded");
        builder.setHeader("Authorization", "Basic " + Base64.encode(("appId" + ":" + "oauthSecret").getBytes()));

        builder.sendRequest(dataAsString, new RequestCallback() {
            @Override
            public void onResponseReceived(Request request, Response response) {
                if(response.getStatusCode() >= 400) {
                    onFail.accept(response);
                } else {
                    onSuccess.accept(response);
                }
            }

            @Override
            public void onError(Request request, Throwable throwable) {
                onFail.accept(null);
            }
        });
    }
}

如您所見,我清楚地將Content-TypeAcceptAuthorization附加到標題中。 此外,我發布了一些數據。

實際上,請求看起來像這樣:

OPTIONS /oauth/token HTTP/1.1
Host: 127.0.0.1:8080
Connection: keep-alive
Access-Control-Request-Method: POST
Origin: http://192.168.2.101:8888
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36
Access-Control-Request-Headers: accept, authorization, content-type
Accept: */*
Referer: http://192.168.2.101:8888/demo.html
Accept-Encoding: gzip, deflate, sdch
Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4

鑒於上述設置,我不希望看到這樣的請求。 我的請求標頭發生了什么? 另外,根本沒有請求正文。 為什么請求類型為Option 有人可以闡明嗎?

這是由於請求是跨源的,並且您看到的是CORS說法中的預檢請求 這是預期的行為,服務器必須使用適當的響應頭對它進行授權。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM