我正在努力了解如何使用JAAS保护Java EE应用程序的安全。
事实上,我理解如何在EJB中使用规则,但是,我不理解如何在web层中验证用户,例如,创建一个带有登录表单的简单JSF页面,检查给定的用户名&使用DB的密码,以及在成功的情况下如何在我的应用程序中为该用户设置Principal。
常见的方法是什么?我希望有尽可能多的独立解决方案。
JAAS不是实现这一点的通用标准。事实上,JAAS登录模块有点不适合JavaEE身份验证。完整的JAAS模型是为本地运行的Java应用程序创建的,它将代码库相互屏蔽(例如,允许从文件系统读取特定的jar)。
Java EE服务器很少运行不受信任的代码,因此JAAS提供的许多功能根本没有使用。
关于这个主题的两篇非常好的文章如下:
- 企业中的JAAS
- JAAS发生了什么事
常见的方法是什么?
不幸的是,常见的是使用AS特定的东西。这个"东西"的术语也很具体。它可以被称为"领域"、"安全域"、"区域"、"登录模块"中的任何东西,谁知道他们还叫它什么
我希望有尽可能多的独立解决方案。
幸运的是,在Java EE 6及更高版本中也有一种标准的方法可以做到这一点,它完全独立于AS:JASPIC auth-modules。
然而,不同的应用程序服务器并不总是完全支持这一点。当然,它是JavaEE标准的一部分意味着供应商必须支持它,但这仍然不意味着他们实现了规范所说的一切(但相反,他们只确定TCK测试的目的)。
有关JASPIC的更多信息,请参阅我写的以下两篇文章:
- 用JASPIC在Java EE中实现容器身份验证
- Java EE 7的身份验证支持有什么新功能