解决报错“java.lang.IllegalAccessError: tried to access class org.bouncycastle.asn1.DEROutputStream from”

解决报错“java.lang.IllegalAccessError: tried to access class org.bouncycastle.asn1.DEROutputStream from class com.wangyin.aks.security.api.CryptoClientServiceImpl”

一、问题

最近调用第三方的接口需要用到国密依赖jar包,引入的是最新的,依赖如下:

<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcpkix-jdk15on -->
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcpkix-jdk15on</artifactId>
    <version>1.70</version>
</dependency>

结果一直报如下错:

Exception in thread "main" java.lang.IllegalAccessError: tried to access class org.bouncycastle.asn1.DEROutputStream from class com.wangyin.aks.security.api.CryptoClientServiceImpl
	at com.wangyin.aks.security.api.CryptoClientServiceImpl.encryptEnvelop(CryptoClientServiceImpl.java:211)
	at com.jddglobal.open.support.security.ReqEncryptAksServiceImpl.encrypt(ReqEncryptAksServiceImpl.java:37)
	at com.jddglobal.open.client.DefaultJddClient.execute(DefaultJddClient.java:66)
	at com.zsp.demo.jl.utils.JLUtils.sendRequest(JLUtils.java:107)
	at com.zsp.demo.jl.utils.JLUtils.sendRequest(JLUtils.java:122)
	at com.zsp.demo.jl.utils.JLUtils.main(JLUtils.java:56)

在这里插入图片描述

二、过程与解决

这是我查找问题的过程,没兴趣的小伙伴可以直接看“解决”。

1、过程

在这里插入图片描述

看问题一个是尝试访问“org.bouncycastle.asn1.DEROutputStream”这个类,先点进去看看

在这里插入图片描述

可以看到这个类还不是“public”访问权限的,因为引入的是最新的版本,那就把版本调低试试,先调成“1.68”版,对应依赖如下:

<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcpkix-jdk15on -->
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcpkix-jdk15on</artifactId>
    <version>1.68</version>
</dependency>

运行,还是报一样的错,点进去查看

在这里插入图片描述

可以看到权限修饰符和“1.70”一样,那将版本降到“1.66”,引入依赖如下:

<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcpkix-jdk15on -->
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcpkix-jdk15on</artifactId>
    <version>1.66</version>
</dependency>

运行,发现问题解决了,再看看对应的“org.bouncycastle.asn1.DEROutputStream”类

在这里插入图片描述

可以看到已经有“public权限了”,那既然“1.66”版可以,再看看“1.67”版,引入对应依赖

<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcpkix-jdk15on -->
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcpkix-jdk15on</artifactId>
    <version>1.67</version>
</dependency>

运行,又报上面的错了,再看看对应的“org.bouncycastle.asn1.DEROutputStream”类有没有权限

在这里插入图片描述

可以看到和“1.68”版的一样,看来只能使用“1.66”版本及以下的了。

2、解决

使用“org.bouncycastle”版本“1.66”及以下的依赖,这是“1.66”版本的依赖

<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcpkix-jdk15on -->
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcpkix-jdk15on</artifactId>
    <version>1.66</version>
</dependency>
在使用PageHelper进行分页查询时,可能会遇到`java.lang.IllegalAccessError`错误。这个错误通常是由于类加载器在加载类时遇到了访问权限问题。以下是一些可能的原因和解决方法: ### 可能的原因 1. **版本不兼容**:PageHelper版本与Spring或MyBatis版本不兼容。 2. **类路径冲突**:项目中存在多个版本的PageHelper或相关依赖,导致类加载冲突。 3. **访问权限问题**:某些类或方法被错误地声明为`private`或`final`,导致无法访问。 ### 解决方法 1. **检查版本兼容性**: - 确保PageHelper版本与Spring和MyBatis版本兼容。可以参考PageHelper的官方文档或GitHub页面查看兼容版本。 2. **排除冲突依赖**: - 使用Maven或Gradle检查项目中是否存在多个版本的PageHelper或其他相关依赖。可以使用以下命令查看依赖树: ```bash mvn dependency:tree ``` 或 ```bash gradle dependencies ``` - 在`pom.xml`或`build.gradle`中排除重复的依赖。 3. **检查类访问权限**: - 仔细检查代码中是否有类或方法被错误地声明为`private`或`final`。确保所有必要的类和方法都具有适当的访问权限。 4. **清理和重建项目**: - 有时,类加载器可能会缓存旧的类文件。尝试清理项目并重新构建: ```bash mvn clean install ``` 或 ```bash gradle clean build ``` 5. **更新PageHelper**: - 确保使用的是最新版本的PageHelper。可以通过Maven Central或PageHelper的GitHub页面查看最新版本。 ### 示例 假设你在使用Maven,并且项目中存在版本冲突,可以按照以下步骤解决: 1. 在`pom.xml`中找到PageHelper依赖: ```xml <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.4.6</version> </dependency> ``` 2. 使用Maven命令查看依赖树: ```bash mvn dependency:tree ``` 3. 如果发现存在多个版本的PageHelper依赖,可以在`pom.xml`中排除重复的依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> <exclusion> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> </exclusion> </exclusions> </dependency> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值