首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Web客户端PUT请求返回403,但Postman请求不返回- Glassfish上的Jersey REST API

Web客户端PUT请求返回403,但Postman请求不返回- Glassfish上的Jersey REST API
EN

Stack Overflow用户
提问于 2020-11-20 06:33:42
回答 1查看 267关注 0票数 1

我正在写一个CRUD应用程序使用泽西和React.js前端的Glassfish 4.0。我的应用程序类:

代码语言:javascript
代码运行次数:0
运行
复制
@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过滤器:

代码语言:javascript
代码运行次数:0
运行
复制
@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:

代码语言:javascript
代码运行次数:0
运行
复制
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的响应,但上面的fetch给了我一个403。我怀疑这与我的CORS过滤器有关,或者是因为我的浏览器使用PUT发送了一个G_ENABLED_IDPS=google cookie。任何帮助都将不胜感激;我已经试着解决这个问题好几个小时了。

EN

回答 1

Stack Overflow用户

发布于 2020-11-22 17:57:07

Access-Control-Allow-Headers响应头的目的是告诉浏览器允许对请求使用哪些请求头。您拥有的列表如下:origin, content-type, accept, authorization, cookie。但在您的请求中,您正在尝试设置User-Agent标头。如果您删除标题或将其添加到列表中,它应该可以工作。

另请参阅:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64921034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档