gpt4 book ai didi

java - Glassfish 3.1.2.2 一段时间后更改了默认登录领域

转载 作者:行者123 更新时间:2023-12-01 04:18:06 24 4
gpt4 key购买 nike

我目前正在开发一个客户端-服务器应用程序,该应用程序使用 ProgrammaticLogin 针对服务器对客户端用户进行身份验证。 Glassfish 设置了一个通过 ActiveDirectory 进行身份验证的默认领域。我们最近将 glassfish 的版本从 3.0.1 升级到 3.1.2.2,现在我们遇到了一个奇怪的错误:运行一段时间后,看似随机地,默认安全性领域已更改为file,而不是ActiveDirectory-realm!不用说,这会限制人们从客户端登录的能力。当 glassfish 重新启动时,它会再次开始工作,并正确使用 ActiveDirectory-realm 进行身份验证。

有谁知道什么可能导致 Glassfish 出现这种行为?可能是与 AD 领域断开连接还是其他原因?

错误生效后堆栈跟踪摘录:

Programmatic login failed
com.sun.enterprise.security.auth.login.common.LoginException: Login failed: Failed file login for me.
at com.sun.enterprise.security.auth.login.LoginContextDriver.doPasswordLogin(LoginContextDriver.java:394)
at com.sun.enterprise.security.auth.login.LoginContextDriver.login(LoginContextDriver.java:240)
at com.sun.enterprise.security.auth.login.LoginContextDriver.login(LoginContextDriver.java:153)
at com.sun.appserv.security.ProgrammaticLogin$1.run(ProgrammaticLogin.java:174)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.appserv.security.ProgrammaticLogin.login(ProgrammaticLogin.java:168)
at com.sun.appserv.security.ProgrammaticLogin.login(ProgrammaticLogin.java:239)
at com.sun.appserv.security.ProgrammaticLogin.login(ProgrammaticLogin.java:211)
[...]
Caused by: javax.security.auth.login.LoginException: Failed file login for me.
at com.sun.enterprise.security.auth.login.FileLoginModule.authenticate(FileLoginModule.java:84)
at com.sun.enterprise.security.auth.login.PasswordLoginModule.authenticateUser(PasswordLoginModule.java:117)
at com.sun.appserv.security.AppservPasswordLoginModule.login(AppservPasswordLoginModule.java:143)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at javax.security.auth.login.LoginContext.invoke(LoginContext.java:784)
at javax.security.auth.login.LoginContext.access$000(LoginContext.java:203)
at javax.security.auth.login.LoginContext$4.run(LoginContext.java:698)
at javax.security.auth.login.LoginContext$4.run(LoginContext.java:696)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:695)
at javax.security.auth.login.LoginContext.login(LoginContext.java:594)
at com.sun.enterprise.security.auth.login.LoginContextDriver.doPasswordLogin(LoginContextDriver.java:382)

最佳答案

在我们的一个测试环境中发生错误后(奇怪的是,它几乎同时发生在 3 个不同的环境中,具有 3 个不同的 ldap),我能够进行调试并更接近解决方案。

首先,我们在发生错误时检查了domain.xml中的默认领域,它仍然指向我们的AD领域,而不是文件。

在使用调试器时,尝试使用文件登录后出现以下异常:

new ProgrammaticLogin().login(username, password);
new ProgrammaticLogin().login(username, password, "default", true);

这两者是等效的,并且都将其留给服务器来确定默认领域是什么。另一方面,当指定我想要进行身份验证的 AD 领域的名称时,它就像一个魅力:

new ProgrammaticLogin().login(username, password, "myRealm", true);

看来我们在 Glassfish 3.1.2.2 中存在一个错误,这使得 glassfish 对于默认登录领域是什么感到困惑。

作为旁注(或两个),对于两个受影响的环境,问题在几分钟后自行解决。另外,只需进入 glassfish 管理控制台,将默认领域更改为文件,然后返回 AD 领域也可以解决问题。 (可能仅保存页面就会产生相同的效果。)

关于java - Glassfish 3.1.2.2 一段时间后更改了默认登录领域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19245627/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com