2

我在 JBOSS 容器中有一个基于 RestEasy 的 REST API,通过 auth-constraint 进行了身份验证。进行任何调用时,授权标头会随请求一起传递。约束的 url 映射是 /*

现在这个 Rest API 的一个客户端需要一个 CORS 请求。我开发了一个网络过滤器,它会为飞行前(即选项)请求和正常请求添加必要的标题。

这工作得很好,正在添加标题。但是由于 RestEasy 使用 url-pattern /* 进行保护,因此它也期望飞行前请求也可以通过身份验证。

现在根据https://dvcs.w3.org/hg/cors/raw-file/tip/Overview.html#preflight-request,飞行前请求将未经身份验证。

此外,我浏览了https://gist.github.com/tganzarolli/8520728并创建了一个类似的未经身份验证的服务来处理带有 @Path("/{var:.*}") 和 @PermitAll 注释的 OPTIONS 请求,因为我想在一个地方处理所有 OPTIONS 请求。

这仍然不起作用,因为与 RestEasy url-pattern /* 关联的 auth-constraint 启动并且我的未经身份验证的服务不起作用,仍然返回 401。

有没有更好的方法来做到这一点?是否可以为上述未经身份验证的服务配置安全约束以在给定场景中解决此问题?

4

1 回答 1

2

经过进一步研究,我发现确实是 auth-constrained RestEasy 覆盖所有 url 模式 /* 导致了这个问题。我用 url-pattern /*覆盖了带有 http-method 的选项的安全约束(参考https://docs.oracle.com/cd/E19798-01/821-1841/bncbk/index.html )。这解决了问题。我希望这对其他人有用。

于 2014-11-25T06:06:05.127 回答