具有声明性安全性的JSP登录 - 实际身份验证是如何发生的?

时间:2010-10-26 13:34:00

标签: security authentication servlets jaspic

我对此感到有点困惑,因为我没有看到很多给我完整画面的例子。我到目前为止找到的最佳解释是this

通过在web.xml中定义安全角色(例如“admin”),并使我的登录表单包含所有必填字段(即j_security_check作为操作,字段j_username,j_password),实际身份验证的方式/位置发生?

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

2 个答案:

答案 0 :(得分:4)

  

通过在web.xml中定义安全角色(例如“admin”),并使我的登录表单包含所有必填字段(即j_security_check作为操作,字段j_username,j_password),实际身份验证的方式/位置发生?

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

  

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

如果您想继续使用容器管理的身份验证,而是想要针对数据库检查登录,那么您需要相应地配置所谓的“领域”。目前还不清楚你正在使用哪个servlet容器,但在例如Tomcat中,文档可以在这里找到:Tomcat 6.0 Realm HOW-TO

如果您确实想要调用自己的自行开发的身份验证系统,那么您需要删除容器管理的安全性并进一步将其生成。 不推荐使用

答案 1 :(得分:3)

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

  1. 通过服务器专有方式,例如JBoss中的*LoginModules,或BalusC提到的Tomcat。每个服务器都有所不同。
  2. 通过Java EE 6中引入的JASPIC。
  3. JASPIC几乎已经标准化了专有方法,但它是一个相当低级的API,不幸的是只能用于完整的Java EE 6和7实现。

    有关详细信息,请参阅Implementing container authentication in Java EE with JASPIC