我正在对部署在最新 Glassfish 服务器 (3.1.2) 上的多模块应用程序使用标准容器身份验证。
我曾经对主 Web 模块进行表单身份验证,对包含其余 Web 服务的模块进行 http 基本身份验证。
现在,对于这两个模块,我需要能够执行证书身份验证,但这只是作为一个选项。一些客户端仍然需要能够通过表单/基本身份验证登录。
我尝试使用 JSR-196 拦截反向代理转发的证书身份验证数据。这里的问题是,在 Glassfish 中,如果我使用 JSR-196,我似乎需要重新实现容器提供的一些帮助:在会话中存储身份验证、SSO,甚至是表单/基本身份验证......似乎是 Glassfish 方式或我的方式,但我想要一个混合。因此,我的 JSR-196 模块现在需要处理证书、基本和表单身份验证以及持久性机制。看起来矫枉过正。
我尝试了一种更天真的方法,即使用表单身份验证并让我的反向代理将身份验证数据发送到 j_security_check。它适用于第一个模块,但过于特定于实现,看起来真的很像 hack。
我还想象在另一个模块中直接在应用服务器上(没有反向代理)进行证书身份验证,并在通过身份验证后重定向到原始模块,使用 sso 作为胶水。但是 glassfish 上的 sso 在具有不同身份验证类型的模块之间不起作用。
如果可能的话,我宁愿使用一些标准的、优雅的东西。另外,我希望我的应用程序使用 Java EE 安全性,而不是某些 3rd 方库,无论是来自 Spring 还是其他任何东西。
在 Glassfish 上实现此功能的选项有哪些?