java - 无法定义以 keycloak 开头的属性

标签 java spring-boot spring-security keycloak

无法定义以 keycloak 开头的属性。如果 keycloak-spring-boot-starter starter jar 观察到 jar 不知道的 keycloak 属性,则它无法加载属性。如果我们在属性前添加“sso”前缀,问题就解决了,有没有办法在保留keycloak前缀的情况下避免这个错误。

keycloak.admin.username=
keycloak.admin.password=

sso.keycloak.admin.username=
sso.keycloak.admin.password=
这是在 Spring Boot 2.5.0 and Keycloak 13.0.0 中看到的错误
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.servlet.Filter]: Factory method 'springSecurityFilterChain' threw exception; nested exception is java.lang.NullPointerException
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653)
        ... 21 more
Caused by: java.lang.NullPointerException
        at org.springframework.security.config.annotation.web.builders.HttpSecurity.addFilterAtOffsetOf(HttpSecurity.java:2654)
        at org.springframework.security.config.annotation.web.builders.HttpSecurity.addFilterAfter(HttpSecurity.java:2645)
        at org.keycloak.adapters.springsecurity.config.KeycloakWebSecurityConfigurerAdapter.configure(KeycloakWebSecurityConfigurerAdapter.java:123)
        at com.foo.config.KeycloakSecurityConfig.configure(KeycloakSecurityConfig.java:36)
        at org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter.getHttp(WebSecurityConfigurerAdapter.java:217)
        at org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter.init(WebSecurityConfigurerAdapter.java:315)
        at org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter.init(WebSecurityConfigurerAdapter.java:93)
        at com.foo.config.KeycloakSecurityConfig$$EnhancerBySpringCGLIB$$501f46fb.init(<generated>)
        at org.springframework.security.config.annotation.AbstractConfiguredSecurityBuilder.init(AbstractConfiguredSecurityBuilder.java:338)
        at org.springframework.security.config.annotation.AbstractConfiguredSecurityBuilder.doBuild(AbstractConfiguredSecurityBuilder.java:300)
        at org.springframework.security.config.annotation.AbstractSecurityBuilder.build(AbstractSecurityBuilder.java:38)
        at org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration.springSecurityFilterChain(WebSecurityConfiguration.java:127)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:564)
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)

最佳答案

此错误是在版本 中引入的Spring Security 5.5.0 随附 Spring Boot 2.5.0 .
发生这种情况是因为 KeyCloak 依次添加了两个过滤器,如下所示:

@Override
protected void configure(HttpSecurity http) throws Exception {
        http
                ...
                .addFilterAfter(keycloakSecurityContextRequestFilter(), SecurityContextHolderAwareRequestFilter.class)
                .addFilterAfter(keycloakAuthenticatedActionsRequestFilter(), KeycloakSecurityContextRequestFilter.class)
                ...
}
现在有一个错误,其中自定义过滤器顺序没有被持久化,从而导致 NullPointerException尝试添加相对于最近添加的另一个自定义过滤器的过滤器时。
我建议你现在做的是使用较低版本的 Spring Boot,比如 2.4.x,直到 issue in GitHub得到解决。

关于java - 无法定义以 keycloak 开头的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67639013/

相关文章:

java - hibernate : @ValueGenerationType applied at insert but not update time

java - 输入更新后不存储 JTextArea 中的预期字符串

java - 如何在 spring boot 中从未经授权的响应中删除变量

java - Hybris Commerce Cuppy 扩展安装失败

java - 检查 Spring 中数据库事务是否完成

java - 如何在 Jboss 7 中部署 jboss seam 2.1.2

java - 为什么我收到意外 token 错误

java - 如何在Spring Boot中从旧 token 生成新的JWT token ?

java - 升级到4.2.3版本时Spring上下文初始化失败

java - 让 Zuul 成为我的应用程序的唯一入口点