4

我对此感到有些困惑,因为我没有看到很多可以让我了解完整情况的示例。到目前为止,我发现的最好的解释是this

通过在 web.xml 中定义一个安全角色,例如“admin”,并让我的登录表单包含所有必要的字段(即 j_security_check 作为操作,以及字段 j_username、j_password),实际身份验证如何/在哪里发生?

我计划使用存储在数据库中的用户名/密码(哈希)使用自定义身份验证。当用户提交表单时,如何让 Java EE Web 容器调用我的 sevlet/bean 方法来执行实际的身份验证?我没有注意到任何地方可以在 web.xml 中为我的代码添加一个挂钩来执行实际的身份验证。

4

2 回答 2

4

通过在 web.xml 中定义一个安全角色,例如“admin”,并让我的登录表单包含所有必要的字段(即 j_security_check 作为操作,以及字段 j_username、j_password),实际身份验证如何/在哪里发生?

在 servlet 实现中,servletcontainer。例如,在 Tomcat 中,它是由AuthenticatorBase类完成的(源代码在这里)。

我计划使用存储在数据库中的用户名/密码(哈希)使用自定义身份验证。当用户提交表单时,如何让 Java EE Web 容器调用我的 sevlet/bean 方法来执行实际的身份验证?我没有注意到任何地方可以在 web.xml 中为我的代码添加一个挂钩来执行实际的身份验证。

如果您想继续使用容器管理的身份验证,而是想根据数据库检查登录,那么您需要相应地配置所谓的“领域”。目前尚不清楚您使用的是哪个 servletcontainer,但在 Tomcat 中,文档可在此处获得:Tomcat 6.0 Realm HOW-TO

如果您真的想调用自己的本地身份验证系统,那么您需要放弃容器管理的安全性并进一步本地开发它。不推荐哪个

于 2010-10-27T02:08:19.397 回答
3

实际的身份验证是通过两种方式进行的:

  1. 通过服务器专有方式,例如 JBoss 中的*LoginModules,或 BalusC 中提到的 Tomcat。这些对于每个服务器都是不同的。
  2. 通过 JASPIC,它是在 Java EE 6 中引入的。

JASPIC 几乎已经标准化了专有方法,但它是一个相当低级的 API,不幸的是仅可用于完整的 Java EE 6 和 7 实现。

有关更多详细信息,请参阅使用 JASPIC 在 Java EE 中实现容器身份验证。

于 2013-05-26T10:02:39.107 回答