Rei*_*ens 18 classnotfoundexception spring-boot keycloak java-11 java-14
我正在运行 KeyCloak 服务器来验证想要访问 Spring Boot/Spring Web REST API 的用户。但是,尝试进行身份验证时发生错误。
以下工作:
http://localhost:8080/path/to/restapi白标错误页面 此应用程序没有明确的 /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
Run Code Online (Sandbox Code Playgroud)
KeyCloak 服务器显示该会话对于该应用程序的用户来说是活动的。但是,由于上述缺少的类,认证过程永远不会完成。
Rei*_*ens 29
经过一番研究,我找到了我的问题的答案。
问题是 java.security.acl.Group 自 JRE 9 以来已被弃用,并标记为在未来版本中删除。
java.security.acl.Group 被 java.security.Policy 取代
我在 JRE 14 上运行我的 Spring-Boot 应用程序,其中这个类似乎不再可用。
因此,一旦我将 Spring-boot 应用程序(托管 REST-API)更改为使用 JRE 11,错误就消失了。
注意:
<java.version>11</java.version>需要更改的 pom.xml Java 版本属性以及 Eclipse 中构建路径中的 JDK(这是我正在使用的 IDE)JDK Buildpath
我能够通过保留 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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11597 次 |
| 最近记录: |