Народы,
Я использую JAX-RS с Jersey 2.17 и Grizzly в качестве своего HTTP-сервера. У меня настроена и работает аутентификация клиента, однако я пытаюсь реализовать контроль доступа к DN сертификата X.509 клиента. Это даст мне возможности, эквивалентные тем, что у меня есть с настроенными Apache httpd и FakeBasicAuth.
Я попытался использовать ContainerRequestFilter, но, похоже, нашел способ получить ссылку на DN клиента, связанный с сеансом TLS. Может ли кто-нибудь показать мне способ получить доступ к сертификату с помощью ContainerRequestFilter или любого другого механизма для достижения той же конечной цели?
РЕДАКТИРОВАТЬ: я попробовал запрос "@javax.ws.rs.core.Context HttpServletRequest;" прошлой ночью перед публикацией, но контекст HttpServletRequest всегда был нулевым. Я использую GrizzlyHttpServerFactory следующим образом:
GrizzlyHttpServerFactory.createHttpServer(
getServerURI(), getResourceConfig(), true,
new SSLEngineConfigurator(sslContext.get())
.setNeedClientAuth(true).setClientMode(false))
Который, как полагают, не является контейнером сервлета и, следовательно, не поддерживает контекст HttpServletRequest. Я быстро посмотрел на GrizzlyWebContainerFactory, но инициализация совершенно другая, и я хотел бы избежать этой боли. Есть ли другой способ получить доступ к сертификату пользователя в «javax.ws.rs.container.ContainerRequestFilter»?
Благодарю вас!
Джон