示例 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 客户端?