Spring Boot KeyCloak服务器原因:java.lang.ClassNotFoundException:java.security.acl.Group

qzwqbdag  于 2023-10-16  发布在  Spring
关注(0)|答案(6)|浏览(234)

我正在运行一个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服务器显示用户到应用程序的会话是活动的。但是,由于上面缺少类,身份验证过程永远不会完成。

llmtgqce

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 Buildpath

5vf7fwbs

5vf7fwbs2#

遇到了同样的问题。
顺便说一句,这是在keycloak问题跟踪报告这里:https://issues.redhat.com/browse/KEYCLOAK-13690
应该在keycloak 11中修复。

yruzcnhs

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:

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      <exclusions>
        <!-- Exclude the Tomcat dependency -->
        <exclusion>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <!-- Add Jetty as a replacement -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-jetty</artifactId>
    </dependency>
zy1mlcev

zy1mlcev4#

查看最新的适配器版本。这应该在版本>= 13.0时得到修复

7xzttuei

7xzttuei5#

只要切换到jdk1.8的keycloak:legacy,它应该可以完美地工作

dgiusagp

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

相关问题