Glassfish 3.1.2 JDBCRealm配置

时间:2012-08-22 06:27:21

标签: java glassfish

您好我已阅读Glassfish 3.1.2's JDBCRealm has a new Password Encryption Algorithm field. What is it for?并搜索了类似主题,但似乎尚未发布明确的答案。

简而言之,我有一个jdbc领域在glassfish 3中工作,当我升级到3.1.2时,相同的配置不起作用。根据前面的线程,我已经将JaasContext设置为jdbcDigestRealm(除了jdbcRealm也不起作用),将摘要算法设置为MD5(我在第3版中使用了MD5并且它有效)。对于密码加密算法,我试过'空白'和'十六进制',两者都不起作用。

有人可以告诉我应该如何配置。我的凭据表基于mysql,根据http://jugojava.blogspot.hk/2011/02/jdbc-security-realm-with-glassfish-and.html使用MD5哈希密码。

5 个答案:

答案 0 :(得分:14)

我成功使其适用于以下设置。我对目前的(错误的)理解添加了一些评论。

  • JAASContext =“jdbcRealm”=>必须根据文件'glassfish3 / glassfish / domains / domain1 / config / login.conf'设置该值。默认情况下,类“com.sun.enterprise.security.auth.login.JDBCLoginModule”(实现JDBCrealm)在“jdbcRealm”下配置。在“jdbcDigestRealm”下配置了另一个登录模块。这个不是当前主题的一部分。
  • JNDI =“...”=>我把那里的数据源名称放在那里 存在于我的应用程序的数据库中。
  • UserTable =“MY_SCHEMA.usertable”=> '完全合格的名字' 数据库表。
  • UserNameColumn =“userid”=>存储用户的列名称 名称
  • PasswordColumn =“password”=>存储(哈希值)的列名 用户密码。
  • GroupTable =“MY_SCHEMA.grouptable”=> '完全合格的名字' 数据库表。
  • GroupTableUserNameColumn =“”=>对此的使用没有任何线索......
  • GroupNameColumn =“groupid”=>存储用户的列名称 名称
  • AssignGroups =“”=>据我所知,GF代码,这是一种为每个在域中注册的用户分配组列表的方法。这是一种硬编码。 GlassFish(可能)可以使用此属性或多或少的每个领域。
  • DatabaseUser =“”=>据我所知,如果你不是,你需要这个 使用JNDI(第二个参数)。
  • DatabasePassword =“”=>据我所知,如果你不是,你需要这个 使用JNDI(第二个参数)。
  • DigestAlgorithm =“SHA-256”=> 'MD5','SHA-1'或'SHA-256'。 'SHA-256' 是默认值。我们来看看'SHA-256'。
  • PasswordEncryptionAlgorithm =“AES”=>在存储密码之前,摘要算法应用于密码。新密码加密是一个增加的安全层,允许加密“哈希”(DA之后的字符串应用于密码)。这样,如果攻击者从数据库中检索密码,则会对其进行加密和散列。这些数据极不可能对攻击者有用。
  • 编码=“Hex”=>您可以选择“Hex”或“Base64”。 Hex对我来说很方便。
  • Charset =“”=>由于我的数据库没有“异国情调”的字符集,我 我认为我不需要在那里设置聪明的东西。我把它留空了 它有效。

希望它会有所帮助。

PS:如果有人链接到 REAL 文档(不是官方版本,此时完全没用),请点击这里链接。

答案 1 :(得分:1)

今天我花了一些时间玩这个(Java EE 7,Ubuntu 12.04上的Glassfish 4)。事实证明,不需要Realm页面上的大多数字段。以下字段是建立与数据库成功连接所需的唯一字段。

  • 领域名称 - 任何名称,只要您在web.xml中使用相同的名称

  • JAAS上下文 - 任何名称

  • JNDI - 任何名称(我使用jdbc / DB名称)

  • 用户表 - 包含所有用户的表

  • 用户名列 - users表中包含用户名的列

  • 密码 - 包含散列密码的列​​(SHA 256)

  • 组表 - 包含组的表

  • 组名列 - 组表中包含组名

  • 的列

我把其他一切都留空了。我的数据库密码列使用SHA 256进行了哈希密码。

我通过填写“密码加密”字段中的随机文本进行测试并保存。重新部署我的应用程序并重新启动Glassfish 4.仍然有效。这意味着该字段仍然存在,而不再被读取。

P.S - 第一个答案中提到的真实文档仍然很差。

答案 2 :(得分:0)

首先要做的事情。你的日志输出是多少? 你的“不工作问题”有什么症状? 是否出现了基本身份验证弹出窗口? 你有没有

No login module configured for jdbcDigestRealm 

或其他错误消息?

如果登录尝试失败导致没有任何日志输出,则更改安全日志级别。

答案 3 :(得分:0)

我对jdbcRealm问题有两个变体。第一个存在于使用GF 3.1.1创建的域中,该域在将GF服务器更新到3.1.2.2版本后继续工作。然后我在这台服务器上创建了一个新域。使用jdbcRealm配置了新域。除了3.1.1配置屏幕下不存在的“密码加密算法”外,3.1.1配置的所有参数都相同。当我尝试使用我的Web应用程序登录时,我不断收到日志文件中的“jdbcrealm.invaliduserreason [#]”错误。

我能够解析并成功登录我的应用程序的唯一方法是将AES添加到“密码加密算法”字段中。我保存了更改并重新启动了服务器,我再一次能够通过jdbcRealm连接成功验证用户身份。

答案 4 :(得分:0)

这里有一个更详细的指南 - > http://is.gd/Jx6Gnp