21

我正在运行 KeyCloak 服务器来验证想要访问 Spring Boot/Spring Web REST API 的用户。但是,尝试进行身份验证时会发生错误。

以下作品:

  • 当我访问http://localhost:8080/path/to/restapi
  • 我按预期看到了一个登录屏幕:-- KeyCloak 登录屏幕
  • 当我单击登录时,从我的浏览器中重定向时会出现以下错误:

Whitelabel 错误页面 此应用程序没有针对 /error 的显式映射,因此您将其视为后备。

这是打印到 Spring 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 服务器显示用户与应用程序的会话处于活动状态。但是,由于上述缺少类,身份验证过程从未完成。

4

4 回答 4

30

经过一番研究,我找到了问题的答案。

问题是 java.security.acl.Group 自 JRE 9 以来已被弃用,并标记为在未来版本中删除。

java.security.acl.Group 正在被 java.security.Policy 取代

我在 JRE 14 上运行我的 Spring-Boot 应用程序,其中此类似乎不再可用。

因此,一旦我将 Spring-boot 应用程序(托管 REST-API)更改为使用 JRE 11,错误就消失了。

注意:需要更改的 pom.xml Java 版本属性<java.version>11</java.version>以及 Eclipse 中构建路径中的 JDK(这是我正在使用的 IDE)JDK Buildpath

于 2020-05-21T10:44:29.270 回答
15

遇到同样的问题。

顺便说一下,这里的 keycloak 问题跟踪器中报告了它:https ://issues.redhat.com/browse/KEYCLOAK-13690

应该在keycloak 11中修复。

于 2020-05-24T09:18:19.017 回答
6

通过保留 JDK 14 但使用 Spring Boot 从 Tomcat 切换到 Jetty,我能够摆脱这个问题。java.security.acl.Group从 9.4.x 开始,Jetty 删除了对这个已弃用的类的使用。见这里: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>
于 2021-02-20T22:27:49.643 回答
1

查看最新的适配器版本。这应该使用版本 >= 13.0 修复

于 2021-07-16T13:40:40.400 回答