You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot OAuth2授权服务器启动报PrivilegedActionException异常

问题根因

报错核心触发原因为JDK版本与旧版Spring Security OAuth2依赖的jaxb-impl版本不兼容。
旧版jaxb-impl-2.3.0.1.jar通过反射调用JDK内部API sun.misc.Unsafe.defineClass实现类加载逻辑,该API在JDK9及以上版本中被移除/方法签名变更,反射调用时直接抛出NoSuchMethodException,连锁导致JWT令牌转换器初始化失败,最终造成springSecurityFilterChain Bean创建失败,Spring容器初始化终止。
你贴出的业务代码、配置本身无逻辑错误,问题本质是依赖兼容性:参考教程默认基于JDK8环境编写,若本地使用JDK9+(含JDK11、JDK17等常用LTS版本)就会触发该异常。

排查方向
  • 优先确认项目运行的JDK版本:执行java -version查看版本号,若版本号≥9,优先定位为依赖兼容问题
  • 校验JAXB依赖版本:Maven项目执行mvn dependency:tree | findstr jaxb(Windows)/mvn dependency:tree | grep jaxb(Mac/Linux),Gradle项目执行./gradlew dependencies | grep jaxb,确认依赖树中是否存在2.3.0.1版本的jaxb-impl、jaxb-core包
  • 最后校验证书有效性:确认resources目录下ssia.jks文件存在,配置的存储密码、密钥别名与生成证书时的参数一致(证书配置错误不会抛出Unsafe相关异常,可放在最后验证)
解决方案

二选一即可,优先根据你的JDK使用需求选择:

方案1:切换JDK版本至1.8(零代码修改适配教程)

教程本身基于JDK8环境开发,直接将项目编译、运行环境切换为JDK8即可直接启动,无需修改任何代码或依赖。
Maven项目可在pom.xml中明确指定编译版本,避免环境不一致:

<properties>
    <java.version>1.8</java.version>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>

方案2:保留高版本JDK,升级JAXB依赖(生产环境推荐)

如果需要使用JDK11及以上版本,无需降级JDK,只需要升级JAXB相关依赖到兼容高版本JDK的版本,替换掉传递依赖引入的2.3.0.1旧版本即可。
Maven项目在pom.xml中添加如下依赖:

<!-- JAXB API -->
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency>
<!-- JAXB 实现,升级到兼容JDK9+的版本 -->
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.3.3</version>
</dependency>
<!-- 排除旧版jaxb-core的不兼容依赖 -->
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-core</artifactId>
    <version>2.3.0.1</version>
    <exclusions>
        <exclusion>
            <groupId>com.sun.activation</groupId>
            <artifactId>javax.activation</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!-- 补充activation依赖 -->
<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>activation</artifactId>
    <version>1.1.1</version>
</dependency>

Gradle项目在build.gradle中添加如下依赖:

implementation 'javax.xml.bind:jaxb-api:2.3.1'
implementation 'com.sun.xml.bind:jaxb-impl:2.3.3'
implementation('com.sun.xml.bind:jaxb-core:2.3.0.1') {
    exclude group: 'com.sun.activation', module: 'javax.activation'
}
implementation 'javax.activation:activation:1.1.1'

添加依赖后刷新依赖包,重新启动项目即可。

证书校验补充

如果完成上述操作后仍启动失败,可通过keytool命令校验JKS证书有效性:

keytool -list -v -keystore ssia.jks -storepass ssia123

命令正常输出证书别名、有效期信息则证书无问题;如果命令报错,可重新生成证书,将生成的ssia.jks放到resources目录即可:

keytool -genkeypair -alias ssia -keyalg RSA -keypass ssia123 -keystore ssia.jks -storepass ssia123 -dname "CN=ssia,OU=ssia,O=ssia,L=bj,ST=bj,C=cn" -validity 3650

内容的提问来源于stack exchange,提问作者LosmiNCL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 19:24:31