【发布时间】:2017-04-27 02:21:14
【问题描述】:
我在我的 JEE 服务器上创建了一个 JAXRS REST API。因此,为了能够接收跨源请求,我添加了一个过滤器提供程序以接受 CORS 请求:
@Provider
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-Headers", "origin, content-type, accept, authorization");
responseContext.getHeaders().add("Access-Control-Allow-Credentials", "true");
responseContext.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
responseContext.getHeaders().add("Access-Control-Max-Age", "1209600");
}
}
我还创建了一个单页 Web 应用程序 (SPWA)(位于 localhost:3000),我试图从位于 localhost:8082 的 REST 端点获取信息。
因此,浏览器检测到我正在尝试获取跨来源的信息。所以它首先尝试OPTIONS 我要发送的请求(检查用户是否存在)。
这是浏览器尝试发送到我的服务器的 CORS 请求:
Host: localhost:8082
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Access-Control-Request-Method: PUT
Access-Control-Request-Headers: passwd,user
Origin: http://localhost:3000
Connection: keep-alive
正如您在 Filter Provider 上看到的,我允许使用这些标头:
responseContext.getHeaders().add("Access-Control-Allow-Headers", "origin, content-type, accept, authorization");
所以,问题是:
我的 REST 端点会增长,每次添加带参数的方法时,我都必须检查和更新
"Access-Control-Allow-Headers"-> 我认为这是一项非常艰巨的任务。是否有某种方法可以信任某些来源并避免浏览器在每次发出请求时首先发送
OPTIONS请求。
希望我解释得这么好。
【问题讨论】:
标签: rest jakarta-ee cors jax-rs