带有 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 参数设置为系统的时区
我正在开发一个游戏!使用 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 参数设置为系统的时区