我正在编写一个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一起发送。任何帮助都将不胜感激;我已经试了好几个小时了。
1条答案
按热度按时间ss2ws0br1#
会议的目的
Access-Control-Allow-Headers
response header告诉浏览器哪些请求头是允许请求的。您的列表如下:origin, content-type, accept, authorization, cookie
. 但在你的请求中,你试图设定User-Agent
标题。如果删除标题或将其添加到列表中,它应该可以工作。另请参见:
跨来源资源共享(cors)
禁止的标头名称
访问控制允许标头
如何在jersey中使用jax-rs处理cor