【发布时间】:2015-03-18 04:32:28
【问题描述】:
人民,
我使用 JAX-RS 和 Jersey 2.17 和 Grizzly 作为我的 HTTP 服务器。我已经配置了客户端身份验证并且可以正常工作,但是,我正在尝试对客户端的 X.509 证书 DN 实施访问控制。这将为我提供与配置 Apache httpd 和 FakeBasicAuth 相同的功能。
我尝试使用 ContainerRequestFilter,但似乎找到了一种方法来获取对与 TLS 会话关联的客户端 DN 的引用。有人可以告诉我一种使用 ContainerRequestFilter 或任何其他机制访问证书以实现相同最终目标的方法吗?
编辑:我尝试了“@javax.ws.rs.core.Context HttpServletRequest req;”昨晚发布前,但 HttpServletRequest 上下文始终为空。我使用 GrizzlyHttpServerFactory 如下:
GrizzlyHttpServerFactory.createHttpServer(
getServerURI(), getResourceConfig(), true,
new SSLEngineConfigurator(sslContext.get())
.setNeedClientAuth(true).setClientMode(false))
这不是一个 servlet 容器,因此不支持 HttpServletRequest 上下文。我很快查看了 GrizzlyWebContainerFactory,但初始化完全不同,我想避免经历那种痛苦。有没有其他方法可以访问“javax.ws.rs.container.ContainerRequestFilter”中的用户证书?
谢谢!
约翰
【问题讨论】:
-
参见 Servlet 规范。客户端证书可通过请求属性获得。