带有 Keycloak 和 Play Framework 的 SocketTimeoutException

SocketTimeoutException with Keycloak and Play Framework

我正在开发一个游戏!使用 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(JavaHttpErrorHandlerAdapter.scala:22)
        at play.core.j.JavaHelpers.$anonfun$invokeWithContext(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的时区配置上。它不同于系统的时区(顺便说一下,这也是 Keycloak 的时区)。

这种时区差异在客户端请求和服务器响应之间造成了人为滞后,导致它认为套接字已经等待了一个小时(或更长时间,具体取决于存在的差距时区之间)。

我找到的解决方案是在启动我的应用程序时通过在 JAVA_OPTS.

中设置 -Duser.timezone=CET 将 TimeZone 参数设置为系统的时区