web客户端put请求返回403,但 Postman 请求不返回-glassfish上的jersey rest api

mznpcxlj  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(494)

我正在编写一个crud应用程序,它使用jersey和glassfish 4.0以及react.js前端。我的应用程序类:

@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响应,但是上面的fetch给出了403响应。我怀疑这与我的cors过滤器有关,或者是一个启用g\u idps=google的cookie与我浏览器的put一起发送。任何帮助都将不胜感激;我已经试了好几个小时了。

ss2ws0br

ss2ws0br1#

会议的目的 Access-Control-Allow-Headers response header告诉浏览器哪些请求头是允许请求的。您的列表如下: origin, content-type, accept, authorization, cookie . 但在你的请求中,你试图设定 User-Agent 标题。如果删除标题或将其添加到列表中,它应该可以工作。
另请参见:
跨来源资源共享(cors)
禁止的标头名称
访问控制允许标头
如何在jersey中使用jax-rs处理cor

相关问题