短版:在纯 Java EE 6 中,是否有类似 Spring's 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 编码。
我希望我可以创建一个新的类来实现一些接口(interface),覆盖一些身份验证方法,参数“login”和“password”返回一个 bool 值来表示成功的身份验证。
然而,在阅读了几个小时的主题之后,我完全迷失了:-(我需要实现一个 JAAS LoginModule 和 Realm 吗?这对我来说看起来很复杂。或者还有另一种标准的 Java EE 6 方法吗?或者我需要采用实现 ServletFilter 的方式吗?
最佳答案
在领域名称标签中,您需要将您在容器中创建的领域名称放入其中。这不是领域类型,它只是您选择的领域名称。
我有一个使用 JBoss AS 的应用程序,并以我的配置为例:
web.xml
<realm-name>weblog-jaas-realm</realm-name>
独立的.xml
<security-domain name="weblog-jaas-realm">
<authentication>
<login-module code="Database" flag="required">
[...]
</login-module>
</authentication>
</security-domain>
关于jakarta-ee - 基于表单的身份验证,但在 Java EE 6 中使用自定义身份验证方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10940738/