我正在运行一个KeyCloak服务器来验证想要访问Sping Boot /Spring Web REST API的用户。但是,尝试进行身份验证时发生错误。
以下工程:
- 访问
http://localhost:8080/path/to/restapi
时 - 我得到了一个登录屏幕,正如预期的那样:-- KeyCloak Login Screen
- 当我点击登录时,在我的浏览器中重定向时出现以下错误:
Whitelabel错误页这个应用程序没有/error的显式Map,所以您将其视为一个后备。
这是打印到Sping Boot 控制台的错误:
Caused by: java.lang.ClassNotFoundException: java.security.acl.Group
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602) ~[na:na]
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) ~[na:na]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) ~[na:na]
... 33 common frames omitted
KeyCloak服务器显示用户到应用程序的会话是活动的。但是,由于上面缺少类,身份验证过程永远不会完成。
6条答案
按热度按时间llmtgqce1#
经过一番研究,我找到了问题的答案。
问题是java.security.acl.Group自JRE 9以来就被弃用,并标记为在未来版本中删除。
java.security.acl.Group is being replaced by java.security.Policy
我在JRE 14上运行我的Spring-Boot应用程序,其中这个类似乎不再可用。
因此,一旦我将我的Spring-boot应用程序(它承载REST-API)更改为使用JRE 11,错误就消失了。
注意:需要更改pom.xml Java版本属性
<java.version>11</java.version>
以及Eclipse(我正在使用的IDE)中构建路径中的JDK JDK Buildpath5vf7fwbs2#
遇到了同样的问题。
顺便说一句,这是在keycloak问题跟踪报告这里:https://issues.redhat.com/browse/KEYCLOAK-13690
应该在keycloak 11中修复。
yruzcnhs3#
我能够通过保留JDK 14,但用Sping Boot 从Tomcat切换到Jetty来摆脱这个问题。从9.4.x开始,Jetty删除了这个不推荐使用的类
java.security.acl.Group
。点击这里:https://github.com/eclipse/jetty.project/issues/3394您必须小心为spring-boot-starter-jetty
选择正确的库版本,以查看它是否已经在下面使用Jetty 9.4+。下面是如何从嵌入式Tomcat切换到Jetty:
zy1mlcev4#
查看最新的适配器版本。这应该在版本>= 13.0时得到修复
7xzttuei5#
只要切换到jdk1.8的keycloak:legacy,它应该可以完美地工作
dgiusagp6#
在我的情况下,SpringBoot应用程序使用java 17,2023-10-05 19:06:13.526 INFO 14332 - [ restartedMain] com.souqh.SouqhbeApplication:在PID为14332的ENCDAPPUNLT 0210上使用Java 17.0.3启动SouqhbeApplication(F:\souqh\souqhbe\bin\main started by Ajinkya.Patil in F:\souqh\souqhbe)
我将我安装的JRE从17更改为11,它对我有效。您可以按照下面的链接在eclipse中更改安装的JRE https://simply-how.com/getting-started-with-java-11#section-3