我正在开发一个 Play!使用 Keycloak 进行身份验证的应用程序。我正在将 Keycloak 实例从一台服务器移动到另一台服务器(例如服务器 A 到服务器 B)。 在服务器 A 上使用 Keycloak 一切正常,但在服务器 B 上使用 Keycloak 时,每次尝试连接到应用程序时都会收到以下错误:
play.api.UnexpectedException: Unexpected exception[RuntimeException: org.pac4j.core.exception.TechnicalException:
java.net.SocketTimeoutException: connect timed out]
at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:247)
at play.api.http.HttpErrorHandlerExceptions.throwableToUsefulException(HttpErrorHandler.scala)
at play.http.DefaultHttpErrorHandler.throwableToUsefulException(DefaultHttpErrorHandler.java:204)
at play.http.DefaultHttpErrorHandler.onServerError(DefaultHttpErrorHandler.java:164)
at play.core.j.JavaHttpErrorHandlerAdapter.$anonfun$onServerError$1(JavaHttpErrorHandlerAdapter.scala:22)
at play.core.j.JavaHelpers.$anonfun$invokeWithContext$1(JavaHelpers.scala:273)
at play.core.j.JavaHelpers.withContext(JavaHelpers.scala:284)
at play.core.j.JavaHelpers.withContext$(JavaHelpers.scala:280)
at play.core.j.JavaHelpers$.withContext(JavaHelpers.scala:293)
at play.core.j.JavaHelpers.invokeWithContext(JavaHelpers.scala:272)
有趣的是,当我在开发模式下本地启动应用程序时,一切正常,但是,当我在开发模式下(在服务器 B 上)启动应用程序时,会发生错误。
我在网上找不到与此问题相关的任何内容。有谁遇到过吗
我使用的是Keycloak 6.0.1
原来问题出在我服务器上Java的TimeZone配置上。它与系统的时区不同(顺便说一下,这也是Keycloak的时区)。
时区的这种差异在客户端的请求和服务器的响应之间造成了人为的滞后,导致客户端认为套接字已经等待了一个小时(或更长时间,具体取决于时区之间的差距) ).
我找到的解决方案是在启动我的应用程序时通过在
-Duser.timezone=CET
中设置 JAVA_OPTS
将 TimeZone 参数设置为系统的时区。