gpt4 book ai didi

java - Keycloak异常 "Cannot access delegate without a transaction"

转载 作者:行者123 更新时间:2023-11-30 07:19:15 28 4
gpt4 key购买 nike

上下文:Keycloak 1.9.1.最终版本和更新版本

嗨,

我创建了一个自定义用户联合提供程序,它是 Keycloak 的类路径属性联合提供程序示例的简单变体。我没有读取属性文件中的用户名,而是从外部 Web 服务中获取用户名。

我的问题是,有时在尝试对测试用户进行身份验证时会出现以下异常:

Failed authentication: java.lang.IllegalStateException: Cannot access delegate without a transaction
at org.keycloak.models.cache.infinispan.UserCacheSession.getDelegate(UserCacheSession.java:78)
at org.keycloak.models.cache.infinispan.UserCacheSession.addUser(UserCacheSession.java:442)
at com.example.keycloak.MyFederationProvider.getUserModel(MyFederationProvider.java:324)
at com.example.keycloak.MyFederationProvider.getUserByUsername(MyFederationProvider.java:206)
at org.keycloak.models.UserFederationManager.getUserByUsername(UserFederationManager.java:237)
at org.keycloak.models.utils.KeycloakModelUtils.findUserByNameOrEmail(KeycloakModelUtils.java:273)
at org.keycloak.authentication.authenticators.browser.AbstractUsernameFormAuthenticator.validateUserAndPassword(AbstractUsernameFormAuthenticator.java:127)
at org.keycloak.authentication.authenticators.browser.UsernamePasswordForm.validateForm(UsernamePasswordForm.java:56)
at org.keycloak.authentication.authenticators.browser.UsernamePasswordForm.action(UsernamePasswordForm.java:49)
at org.keycloak.authentication.DefaultAuthenticationFlow.processAction(DefaultAuthenticationFlow.java:84)
at org.keycloak.authentication.AuthenticationProcessor.authenticationAction(AuthenticationProcessor.java:759)
at org.keycloak.services.resources.LoginActionsService.processFlow(LoginActionsService.java:359)
at org.keycloak.services.resources.LoginActionsService.processAuthentication(LoginActionsService.java:341)
at org.keycloak.services.resources.LoginActionsService.authenticateForm(LoginActionsService.java:386)
...

我不明白为什么会发生这个异常。我查看了 org.keycloak.models.cache.infinispan.UserCacheSession 类,我可以看到当 transactionActive 变量为 false 时抛出异常,但我没有了解在什么条件下它被设置为 false。

我尝试使用 KeycloakModelUtils.runJobInTransaction() 方法或通过在 周围添加 begin()commit() 来强制执行事务>addUser() 调用,但它没有解决问题(我收到一个新错误,通知事务已经处于 Activity 状态)。

您是否已经经历过这种异常并知道如何避免它?

非常感谢

最佳答案

我想我可以找到我的错误(或者至少找到一个解决方法)。

我的用户联合提供程序的 getInstance() 方法始终返回相同的对象(单例)。我更新了它,以便让它在每次调用该方法时创建一个新的提供程序。

这似乎可以解决问题。

关于java - Keycloak异常 "Cannot access delegate without a transaction",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37861264/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com