You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot通过负载均衡器调用Keycloak创建用户时持续报404错误

Spring Boot + Keycloak生产环境创建用户返回404错误

在Spring Boot应用中基于Keycloak实现了用户管理系统,测试环境运行完全正常,但生产环境中通过负载均衡器调用Keycloak创建用户时始终返回404错误。

报错信息

com.example.solar.frontend.usecase.exceptions.KeycloakException: Error creating Keycloak user. Get Response 404
Sep 14 08:34:08 solar[23098]: at com.example.solar.frontend.adapter.outgoing.KeycloakUserService.createUser(KeycloakUserService.java:59) ~[classes!/:0.0.4]

服务代码

public class KeycloakUserService implements UserService {

private final RealmResource realmResource;

@Autowired
public KeycloakUserService(KeycloakProvider keycloakProvider, @Value("${keycloak.realm}") String realm) {

    realmResource = keycloakProvider.keycloak().realm(realm);
}

public String createUser(KeycloakUserRequest userRequest) throws KeycloakException {

    UsersResource usersResource = realmResource.users();
    CredentialRepresentation credentialRepresentation = createPasswordCredentials(userRequest.getPassword());

    UserRepresentation kcUser = new UserRepresentation();
    kcUser.setUsername(userRequest.getUsername());
    kcUser.setCredentials(Collections.singletonList(credentialRepresentation));
    kcUser.setFirstName(userRequest.getFirstname());
    kcUser.setLastName(userRequest.getLastname());
    kcUser.setEmail(userRequest.getEmail());
    kcUser.setEnabled(true);
    kcUser.setEmailVerified(false);

    Response response = usersResource.create(kcUser);

    if (response.getStatus() == HttpStatus.SC_CREATED) {

        String userId = response.getLocation().getPath().replaceAll(".*/([^/]+)$", "$1");
        log.info("Successfully created user in Keycloak userId: {}, email: {}, firstname: {}, lastname: {}", userId,
                kcUser.getEmail(), kcUser.getFirstName(), kcUser.getLastName());
        return userId;
    } else {
        throw new KeycloakException("Error creating Keycloak user. Get Response " + response.getStatus() + " " + response.getStatusInfo().getReasonPhrase());
    }
}

配置文件(application.properties)

keycloak.realm=<realm>
keycloak.auth-server-url=http://<loadbalancer-keycloak-url>/auth/
keycloak.resource=solar
keycloak.credentials.secret=<secret>

开发环境直接调用Keycloak地址时运行正常(http协议无误),且通过浏览器访问负载均衡地址能正常返回Keycloak管理首页,说明地址正确。请问遗漏了哪些配置,或者还能进行哪些排查?


问题解决

最终已解决该问题,原因是防火墙限制——生产环境防火墙仅开放了浏览器访问Keycloak前端页面的路径/端口,阻挡了应用服务通过负载均衡器调用Keycloak的API接口。

内容的提问来源于stack exchange,提问作者Michael Kronberger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 04:35:33