Keycloak重定向本地主机,而不重定向远程URL

时间:2019-11-15 08:36:04

标签: java web redirect server keycloak

我将我的Keycloak服务器和Web应用程序连接到Keycloak,以登录到该应用程序。

如果我在本地运行,它会完美重定向,但是如果我将服务器和Web应用程序部署在同一服务器上,则当Web应用程序重定向到keycloak时,它将重定向到localhost而不是远程URL。

有什么主意如何避免重定向到本地主机?

2 个答案:

答案 0 :(得分:2)

对于Spring Boot Web应用程序,重定向URL在属性中定义为:

keycloak.auth-server-url = http://localhost:8080/auth

如果您具有JSON配置文件,则它将类似于:

{
  ...
  "auth-server-url" : "http://localhost:8080/auth"
}

有关更多详细信息,您可以查看Securing Apps文档

答案 1 :(得分:0)

最后,我找到了一个适合我的情况的答案。我创建了一个KeycloakConfigResolver类,在其中根据正在运行的计算机的主机加载KeycloakDeployment,就像它完全重定向到所需的主机一样。

@Configuration
public class PathServerKeycloakConfigResolver implements KeycloakConfigResolver
{
  @Override
  public KeycloakDeployment resolve(Request request)
  {
    String hostname = "Unknown";

    try
    {
      InetAddress addr;
      addr = InetAddress.getLocalHost();
      hostname = addr.getHostName();
      return KeycloakDeploymentBuilder.build(getKeycloakJson(hostname));
    }
    catch (IOException e)
    {
      e.printStackTrace();
      return null;
    }
  }

  private InputStream getKeycloakJson(String hostname) throws IOException
  {
    InputStream inputStream = new FileInputStream("src/main/resources/keycloak.json");
    InputStreamReader isReader = new InputStreamReader(inputStream);
    BufferedReader reader = new BufferedReader(isReader);
    StringBuffer sb = new StringBuffer();
    String str;
    while ((str = reader.readLine()) != null)
    {
      sb.append(str);
    }

    return new ByteArrayInputStream(sb.toString().replace("{param_keycloak_server}", hostname).getBytes(StandardCharsets.UTF_8));
  }


}

keycloak.json在哪里

{
  "realm": "FocusocKeycloak",
  "auth-server-url": "http://{param_keycloak_server}:8080/auth",
  "ssl-required": "external",
  "resource": "login-app",
  "verify-token-audience": true,
  "credentials": {
    "secret": "XXX"
  },
  "confidential-port": 0,
  "policy-enforcer": {}
}