コンテキスト「トランザクションなしデリゲートにアクセスできません」 Keycloakのクラスパスプロパティのフェデレーションプロバイダの例プロパティファイルでユーザー名を読み取るのではなく、外部Webサービスから取得します。Keycloak例外は
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)
...
この例外はoccures、なぜ私が理解することはできません。
私のトラブルは、テストユーザーを認証しようとすると、時々、私は次の例外を取得していることです。私はorg.keycloak.models.cache.infinispan.UserCacheSession
クラスを見て、transactionActive
変数がfalseのときに例外がスローされることがわかりましたが、どのような条件でfalseに設定されているのか分かりません。
私はKeycloakModelUtils.runJobInTransaction()
メソッドまたはaddUser()
呼び出しarroundのbegin()
とcommit()
を追加することによって、トランザクションを強制的に試みたが、それは(私はトランザクションがすでにアクティブであることを通知し、新たなエラーが発生しました)問題を解決していませんでした。
既にこの例外が発生していて、回避する方法は知っていましたか?
ありがとうたくさん
「領域設定」で領域とユーザーキャッシュを強制的にリセットしてすぐにKeycloakを再起動すると、ログインは一度しか機能しません。別のログインでログインすると、例外が発生します。 – morbac