【问题标题】:Example keycloak spring-boot app fails to find bean KeycloakSpringBootConfigResolver示例 keycloak spring-boot 应用程序无法找到 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,但这会导致有关其他未满足的依赖项的其他运行时错误。

标签: java spring-boot keycloak


【解决方案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
    猜你喜欢
    • 2020-04-17
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    • 1970-01-01
    • 2019-10-09
    • 1970-01-01
    • 2020-11-18
    • 2019-07-02
    相关资源
    最近更新 更多