簡體   English   中英

Web 客戶端 PUT 請求返回 403,但 Postman 請求不返回 - Glassfish 上的 Jersey REST API

[英]Web Client PUT request returns 403 but Postman request does not - Jersey REST API on Glassfish

我正在使用帶有 React.js 前端的 Jersey 和 Glassfish 4.0 編寫 CRUD 應用程序。 我的應用類:

@ApplicationPath("API")
public class AppServ extends Application
{
    @Override
    public Set<Class<?>> getClasses() 
    {
        Set<Class<?>> classes = new HashSet<>();
        classes.add(RestRoot.class);
        classes.add(JacksonFeature.class);
        return classes;
    }
    
    @Override
    public Set<Object> getSingletons()
    {
        Set<Object> out = new HashSet<>();
        out.add(new CorsFilter());
        return out;
    }
}

我的 CORS 過濾器:

@Provider
@Priority(Priorities.HEADER_DECORATOR)
public class CorsFilter implements ContainerResponseFilter
{

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

}

我的前端執行的提取:

fetch("MY_SERVER_IP:8080/FitAppBackend/API/food", {
    method: 'PUT',
    credentials: 'include',
    headers: {
        'Accept': '*/*',
        'Content-Type': 'application/json',
        'User-Agent': ''
    },
    body: JSON.stringify({
        name: this.state.fName,
        cals: this.state.cals,
        prot: this.state.prot,
        carbs: this.state.carbs,
        fat: this.state.fat
    })      
});

當我用 Postman 測試 API 時,我得到 204 響應,但上面的獲取給了我 403。我懷疑它與我的 CORS 過濾器有關,或者 G_ENABLED_IDPS=google cookie 與由我的瀏覽器放置。 任何幫助將不勝感激; 我一直試圖解決這個問題幾個小時。

Access-Control-Allow-Headers響應頭的目的是告訴瀏覽器允許請求的請求頭。 您擁有的列表如下: origin, content-type, accept, authorization, cookie 但是在您的請求中,您試圖設置User-Agent標頭。 如果您刪除標題或將其添加到列表中,它應該可以工作。

也可以看看:

暫無
暫無

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

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