javax.security.auth.login.LoginException:将应用程序迁移到 Java 11 时未找到 LoginModule

问题描述 投票:0回答:1

我们正在将我们的 Java 应用程序从 Java 8 迁移到 Java 11。我们使用 install4j 版本 7.0.10 将 jre 捆绑在应用程序中。 java11 的 jre 包是使用 install4j 应用程序创建的(项目 --> 创建 JRE 包)

当我们尝试登录应用程序时,出现以下错误并且登录失败。 javax.security.auth.login.LoginException:没有为 newco.connectivity.PublicAuthenticatorLoginModule 找到 LoginModule 在 javax.security.auth.login.LoginContext.invoke(LoginContext.java:731) ~[?:?] 在 javax.security.auth.login.LoginContext$4.run(LoginContext.java:672) ~[?:?] 在 javax.security.auth.login.LoginContext$4.run(LoginContext.java:670) ~[?:?] 在 java.security.AccessController.doPrivileged(本机方法)~[?:?] 在 javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:670) ~[?:?] 在 javax.security.auth.login.LoginContext.login(LoginContext.java:581) ~[?:?] 在 newco.connectivity.NewcoExecutionContext.sendLoginRequest(NewcoExecutionContext.java:398)~[connectivity.jar:?] 在 newco.connectivity.NewcoExecutionContext.doLogin(NewcoExecutionContext.java:308) ~[connectivity.jar:?] 在 newco.connectivity.NewcoExecutionContext.doConnect(NewcoExecutionContext.java:256)~[connectivity.jar:?] 在 newco.connectivity.NewcoExecutionContext.connect(NewcoExecutionContext.java:233) ~[connectivity.jar:?] 在 newco.connectivity.connection.DefaultServerConnection.start(DefaultServerConnection.java:147) [connectivity.jar:?] 在 newco.net.connectmgr.RMIServerConnection$2.call(RMIServerConnection.java:73) [client.jar:?] 在 newco.net.connectmgr.RMIServerConnection$2.call(RMIServerConnection.java:72) [client.jar:?] 在 com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptibly(TrustedListenableFutureTask.java:125) [guava-28.2-jre.jar:?] 在 com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:69)[guava-28.2-jre.jar:?] 在 com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:78)[guava-28.2-jre.jar:?] 在 java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1426) [?:?] 在 java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290) [?:?] 在 java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020) [?:?] 在 java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656) [?:?] 在 java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594) [?:?] 在 java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183) [?:?]

我已经验证包中存在 newco.connectivity.PublicAuthenticatorLoginModule。 JRE 包版本是 11.0.10

install4j
1个回答
0
投票

问题的发生是由于 Java11 中

ForkJoinPool.commonPool()
实现的变化。

在 Java 8 中,

ForkJoinPool
使用
URLClassLoader
的子类来加载
contextClassLoader
.

Java11中,

forkJoin
池使用
ClassLoaders$AppClassLoader
加载
contextClassLoader
.

所以,

contextClassLoader
没有加载特定于应用程序的罐子。

© www.soinside.com 2019 - 2024. All rights reserved.