【问题标题】:SocketTimeoutException with Keycloak and Play Framework带有 Keycloak 和 Play 框架的 SocketTimeoutException
【发布时间】:2021-08-05 09:38:52
【问题描述】:

我正在开发一个 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 playframework keycloak


    【解决方案1】:

    原来问题来自我服务器上 Java 的 TimeZone 配置。它与系统的 TimeZone 不同(顺便说一下,这也是 Keycloak 的时区)。

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

    我找到的解决方案是在启动我的应用程序时通过在JAVA_OPTS 中设置-Duser.timezone=CET 将TimeZone 参数设置为系统的时区。

    【讨论】:

      猜你喜欢
      • 2011-12-05
      • 2014-12-23
      • 2020-09-19
      • 2017-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-20
      • 2015-01-16
      相关资源
      最近更新 更多