示例 keycloak spring-boot 应用程序无法找到 bean KeycloakSpringBootConfigResolver

Posted

技术标签:

【中文标题】示例 keycloak spring-boot 应用程序无法找到 bean KeycloakSpringBootConfigResolver【英文标题】:Example keycloak spring-boot app fails to find bean KeycloakSpringBootConfigResolver 【发布时间】:2020-01-07 07:27:05 【问题描述】:

我正在尝试从以下位置运行示例应用程序:

https://github.com/keycloak/keycloak-quickstarts/tree/latest/app-springboot

我收到错误:

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 1 of method setKeycloakSpringBootProperties in org.keycloak.adapters.springboot.KeycloakBaseSpringBootConfiguration required a bean of type 'org.keycloak.adapters.springboot.KeycloakSpringBootConfigResolver' that could not be found.


Action:

Consider defining a bean of type 'org.keycloak.adapters.springboot.KeycloakSpringBootConfigResolver' in your configuration.


Process finished with exit code 1

【问题讨论】:

我没有实际的答案来解决这个问题,但我确实看到 Keycloak 问题跟踪器上存在类似的错误,以获取另一个快速入门。 https://issues.jboss.org/browse/KEYCLOAK-11218 通过克隆该项目并尝试运行它,我还能够重现您看到的相同失败。您可能需要为此快速启动项目创建票证,以防他们错过了该问题会影响多个快速启动。我确实尝试定义该类型的 bean,但这会导致有关其他未满足的依赖项的其他运行时错误。 【参考方案1】:

Thomas answer 确实为我工作。但是,必须手动启用 keycloak spring boot 属性类,方法是像这样注释 Application 类:

@EnableConfigurationProperties(KeycloakSpringBootProperties.class)

此外,必须显式覆盖自定义 keycloak spring boot config resolver bean。

@Bean
@Primary
public KeycloakConfigResolver keycloakConfigResolver(KeycloakSpringBootProperties properties) 
      return new MyKeycloakSpringBootConfigResolver(properties);

【讨论】:

【参考方案2】:

我目前没有解决方案,但我可以看到几个月前在 Keycloak Jira 上注册了完全相同的问题:https://issues.jboss.org/browse/KEYCLOAK-10595。这个问题似乎是由这个 PR 提供的代码引起的:https://github.com/keycloak/keycloak/pull/6075。

PR的作者是这样描述问题的: “唯一剩下的问题是,解析器通常包含在使用 KeycloakAutoConfiguration(在我的示例中为 SharedConfiguration)的配置中,因此您在创建配置时尝试访问 bean。这可以通过移动解析器来解决bean 到另一个配置中,该配置必须在 KeycloakAutoConfiguration 之前加载。” (来源:https://issues.jboss.org/browse/KEYCLOAK-10334?focusedCommentId=13738518&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-13738518)


更新(旧)

关于 Keycloak Jira (https://issues.jboss.org/browse/KEYCLOAK-11282) 的问题,已建议临时解决方法。

@Configuration
public class MyKeycloakSpringBootConfigResolver extends KeycloakSpringBootConfigResolver 
    private final KeycloakDeployment keycloakDeployment;

    public MyKeycloakSpringBootConfigResolver(KeycloakSpringBootProperties properties) 
        keycloakDeployment = KeycloakDeploymentBuilder.build(properties);
    

    @Override
    public KeycloakDeployment resolve(HttpFacade.Request facade) 
        return keycloakDeployment;
    


最新更新

解决问题的更简单方法是在单独的配置类中声明KeycloakSpringBootConfigResolver。此选项将解决 Spring Boot 和 Spring Security 的问题。

@Configuration
public class KeycloakConfig 

    @Bean
    public KeycloakSpringBootConfigResolver keycloakConfigResolver() 
        return new KeycloakSpringBootConfigResolver();
    

【讨论】:

这对我有用。深入了解这里发生的事情:检查 application.properties / application.yaml 中的 keycloak.* 属性是否设置正确。请参阅 Keycloak 快速入门示例了解如何执行此操作。 感谢托马斯的帮助!你节省了我很多时间 :) 在单独的配置类中声明 bean KeycloakSpringBootConfigResolver 的解决方案非常适合我! 旁注:如果您仍希望将所有 keycloak 配置放在一个文件中,则可以将单独的解析器配置设为静态内部类。这个内部类也被spring捡起来了。 “最新更新”适用于 Keycloak v8.0.2

以上是关于示例 keycloak spring-boot 应用程序无法找到 bean KeycloakSpringBootConfigResolver的主要内容,如果未能解决你的问题,请参考以下文章

403 spring-boot-2-keycloak-适配器

在 spring-boot 中禁用特定 url 的 Keycloak 身份验证

如何在 spring-boot 应用程序中配置多个 Keycloak sso 客户端?

Springboot 集成keycloak admin-cli api

如何使用 Keycloak 解码 JWT

Keycloak,如何保护不提供网页的 Spring Boot 后端?