当前位置: 首页 > 知识库问答 >
问题:

如果为用户存储SPI选择“no_cache”缓存策略,KeyCloak 7.0.0抛出NullPointerException

益何平
2023-03-14

创建了一个用户存储SPI,用于对外部数据库中的用户进行身份验证,可以在KeyCloak的“用户”页面中列出所有用户,用户可以从KeyCloak登录页面http://127.0.0.1:8080/auth/realms/dev/account/登录。但是如果我想从http://127.0.0.1:8080/auth/realms/dev/protocol/openid-connect/token获取访问令牌,KeyCloak会抛出异常,如下所示。如果我将缓存策略设置为“默认”,KeyCloak工作得很好。

09:18:04,972 ERROR [org.keycloak.services.error.KeycloakErrorHandler] (default task-3) Uncaught server error: java.lang.NullPointerException
        at org.keycloak.models.utils.KeycloakModelUtils.resolveAttribute(KeycloakModelUtils.java:415)
        at org.keycloak.protocol.oidc.mappers.UserAttributeMapper.setClaim(UserAttributeMapper.java:101)
        at org.keycloak.protocol.oidc.mappers.AbstractOIDCProtocolMapper.setClaim(AbstractOIDCProtocolMapper.java:119)
        at org.keycloak.protocol.oidc.mappers.AbstractOIDCProtocolMapper.transformAccessToken(AbstractOIDCProtocolMapper.java:81)
        at org.keycloak.protocol.oidc.TokenManager.transformAccessToken(TokenManager.java:553)
        at org.keycloak.protocol.oidc.TokenManager.createClientAccessToken(TokenManager.java:411)
        at org.keycloak.protocol.oidc.TokenManager$AccessTokenResponseBuilder.generateAccessToken(TokenManager.java:712)
        at org.keycloak.protocol.oidc.endpoints.TokenEndpoint.resourceOwnerPasswordCredentialsGrant(TokenEndpoint.java:609)
        at org.keycloak.protocol.oidc.endpoints.TokenEndpoint.processGrantRequest(TokenEndpoint.java:190)

共有1个答案

邢皓
2023-03-14

在您自己的UserModel实现中,如下面所示重写方法,如果属性不存在,则返回一个空列表。

@override公共列表getAttribute(字符串名称){final List values=super.getAttribute(名称);return optional.ofNullable(values).orelse(Collections.EmptyList());}

 类似资料:
  • 我创建了一个用户存储SPI,用于对外部数据库中的用户进行身份验证,我可以在keydeport的“用户”页面列出所有用户,用户可以从keydeport登录页面登录http://127.0.0.1:8080/auth/realms/dev/account/.但如果我想从http://127.0.0.1:8080/auth/realms/dev/protocol/openid-connect/token

  • 问题内容: 我该如何决定使用哪个? , , , 。 我阅读了https://www.hibernate.org/hib_docs/v3/api/org/hibernate/cache/CacheConcurrencyStrategy.html,但没有足够详细地解释。 问题答案: 在Hibernate文档确实在他们定义了很好的工作: 19.2.2。策略:只读 如果您的应用程序需要读取而不是修改持久类

  • 本文向大家介绍iOS 缓存存储方式有哪些策略?相关面试题,主要包含被问及iOS 缓存存储方式有哪些策略?时的应答技巧和注意事项,需要的朋友参考一下 你可以设置缓存的数据需要保存多长时间,ASIHTTPRequest提供了两种策略: a,ASICacheForSessionDurationCacheStoragePolicy,默认策略,基于session的缓存数据存储。当下次运行或[ASIHTTPR

  • 问题内容: 我该如何决定使用哪个? , , , 。 我阅读了https://www.hibernate.org/hib_docs/v3/api/org/hibernate/cache/CacheConcurrencyStrategy.html,但没有足够详细地解释。 问题答案: 在Hibernate文档确实在他们定义了很好的工作: 19.2.2。策略:只读 如果您的应用程序需要读取而不是修改持久类

  • 我试图解决的用例是 用户将显示keycloak登录屏幕。Onsubmission用户将根据外部数据源验证。 从外部数据源中检索一些属性,将其映射到KeyCloak的id和访问令牌。 我所做的是从实现自定义身份验证器SPI开始,认为这不是正确的方法,现在实现了UserStorageProvider。 遵循文档(https://www.keycloak.org/docs/latest/server_d

  • 我正试图在我的应用程序中使用保险库。我使用的身份验证机制是LDAP。我已经完成了配置,我的用户可以登录到vault,但他们不能看到我作为根用户创建的任何秘密引擎。 例如,我启用了一个秘密引擎,并在其中创建了2个密钥。我希望我的ldap用户直接从UI读/写机密。我的策略文件是这样的- 如果有人能帮我,就告诉我。