微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

对同一用户的KeyCloak并发身份验证请求导致带有LockAcquisitionException的死锁

如何解决对同一用户的KeyCloak并发身份验证请求导致带有LockAcquisitionException的死锁

我有一个API,可以执行一些我们不维护会话的业务操作。 KeyCloak身份验证发生在凭据而非令牌上。 在这种情况下,我的API会针对每个请求调用KeyCloak进行身份验证。如果该API是针对批量请求(同时)而被调用的,并且所有调用都具有相同的userId; KeyCloak间歇性失败并返回错误:少数请求返回LockAcquisitionException。

2020-11-03 08:12:30,487 WARN  [org.hibernate.engine.jdbc.spi.sqlExceptionHelper] (default task-24) sql Error: 1213,sqlState: 40001
2020-11-03 08:12:30,487 ERROR [org.hibernate.engine.jdbc.spi.sqlExceptionHelper] (default task-24) Deadlock: wsrep aborted transaction
2020-11-03 08:12:30,494 ERROR [io.undertow.request] (default task-24) UT005023: Exception handling request to /auth/realms/myrealm/protocol/openid-connect/token: org.jboss.resteasy.spi.UnhandledException: javax.persistence.PersistenceException: org.hibernate.exception.LockAcquisitionException: Could not extract ResultSet
        at org.jboss.resteasy.core.ExceptionHandler.handleApplicationException(ExceptionHandler.java:76)
...

由于这一点,每当用户调用多个请求时,有时失败并成功执行。

我发现下面有1个线程为此打开,但是那里没有太多答复,也没有主要观点。 https://keycloak.discourse.group/t/deadlock-on-concurrent-requests-updating-users/4704

使用Keyclaok 6.0.1和Java 1.8 将JBoss EAP 7.0.1用作1个应用程序中的应用程序服务器,并将Tomcat服务器与Spring Boot应用程序一起使用。

感谢任何帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。