简短版:在纯 Java EE 6 中,是否有类似Spring 的 Authentication Processing Filter 之类的东西,它可以自定义基于表单的身份验证?
长版:我正在开发一个纯 Java EE 6 Web 应用程序(JSF2、CDI),它必须独立于稍后使用的具体 Java EE 6 容器。
访问受限的 JSF2 页面存储在子文件夹/pages中。在我的 web.xml 中,我定义了以下内容来限制对这些页面的访问:
<login-config>
<auth-method>FORM</auth-method>
<realm-name>??????????</realm-name>
<form-login-config>
<form-login-page>/login.jsf</form-login-page>
<form-error-page>/access_denied.jsf</form-error-page>
</form-login-config>
</login-config>
<security-constraint>
<display-name>pages_auth</display-name>
<web-resource-collection>
<web-resource-name>pages</web-resource-name>
<url-pattern>/pages/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>AuthenticatedUser</role-name>
</auth-constraint>
</security-constraint>
<security-role>
<role-name>AuthenticatedUser</role-name>
</security-role>
如“???”所示 在上面的代码中,我不能使用像 JDBC 这样的预定义领域之一,因为要使用的认证是非常自定义的(讨厌的细节:凭据是根据丑陋的遗留系统检查的)并且需要一些 Java 编码。
我希望我可以创建一个新的类来实现一些接口,覆盖一些身份验证方法,参数“login”和“password”返回一个布尔值来表示成功的身份验证。
然而,在阅读了几个小时的主题之后,我完全迷失了:-(我需要实现一个 JAAS LoginModule 和 Realm 吗?这对我来说看起来很复杂。或者还有另一种标准的 Java EE 6 方法吗?或者我需要采用实现 ServletFilter 的方式吗?