处理对安全受限的 RestEasy 支持的 rest api 2.x 的 PreFlight 请求

Posted

技术标签:

【中文标题】处理对安全受限的 RestEasy 支持的 rest api 2.x 的 PreFlight 请求【英文标题】:handling PreFlight requests to a security-constrained RestEasy powered rest api 2.x 【发布时间】:2015-01-15 09:16:17 【问题描述】:

我在 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。

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于处理对安全受限的 RestEasy 支持的 rest api 2.x 的 PreFlight 请求的主要内容,如果未能解决你的问题,请参考以下文章

使用 RestEasy 处理没有“根”元素的 JSON 响应

RESTEasy中的通用异常处理ExceptionMapper

RestEasy JAVAX 异步注意事项

为啥vm fusion中显示需要使用 “Intel‘VMX 不受限客户机’功能才能在 Intel 处理器上运行此虚拟机。”

如何使用 Spring/Servlets 支持批量 Web api 请求处理

如何使用符合 JAX-RS 2.0 的 RESTEasy 客户端 API 启用 NTLM 身份验证?