Authentication Glassfish身份验证:域可以是外部数据库吗

Authentication Glassfish身份验证:域可以是外部数据库吗,authentication,glassfish,jdbcrealm,Authentication,Glassfish,Jdbcrealm,我对登录和身份验证概念完全陌生。我正在开发一个Glassfish web应用程序,它应该向任何访问者提供一般内容,并为使用用户名和密码登录的注册用户提供一些额外内容 我一直在阅读关于安全性的JavaEE教程,我认为基于表单或HTTP身份验证可以满足我的需要(当访问者试图浏览安全内容时,会要求提供凭据) 然而,我的第一个猜测是,注册的用户应该与他们的散列和盐渍密码一起存储在外部数据库中。 Glassfish中web应用程序的安全性似乎依赖于直接在应用程序服务器上手动填充的领域(定义用户和组,并将它

我对登录和身份验证概念完全陌生。我正在开发一个Glassfish web应用程序,它应该向任何访问者提供一般内容,并为使用用户名和密码登录的注册用户提供一些额外内容

我一直在阅读关于安全性的JavaEE教程,我认为基于表单或HTTP身份验证可以满足我的需要(当访问者试图浏览安全内容时,会要求提供凭据)

然而,我的第一个猜测是,注册的用户应该与他们的散列和盐渍密码一起存储在外部数据库中。 Glassfish中web应用程序的安全性似乎依赖于直接在应用程序服务器上手动填充的领域(定义用户和组,并将它们映射到应用程序中的角色)

我是否误解了Glassfish的安全性?或者领域可以是应用服务器外部的外部数据库?关于这个主题的任何文档链接对我都很有用

先谢谢你

这实际上是可能的。 在Glassfish中,转到Configuration/Security/Realms,创建一个新领域,并将类名设置为com.sun.enterprise.Security.auth.realm.jdbc.JDBCRealm。 指示绑定到数据库的JDBC资源,并指示存储用户名/密码的表和列。数据库还应包含一个表,用于用户必须属于哪些组才能被授予访问权限。也要指出那些


在应用程序中,像往常一样使用域名设置web.xml和sun-web.xml。

下面是一篇关于glassfish中jdbc领域的文章,其中有您描述的场景:

文档:利用MySQL的博客条目:虽然这几乎是可能的,但我认为您不能在散列之前让JDBCRealm修改密码,这实际上是一个严重的弱点。此外,Glassfish的领域实现在组/角色映射方面存在严重缺陷,因为角色必须在sun-web.xml中进行“硬编码”。使用视图可以解决这个问题,但这是一个人为的解决方案。您可以通过实现自己的领域来解决salt问题,但我认为解决组/角色映射问题更难。