shiro-jar-1.4版本升级到1.6版本问题探讨

最近公司领导用阿里云的工具扫描服务器上的项目,发现很多的高危漏洞;

其中有一个是shiro-jar-1.4版本存在高风险漏洞,所以赶紧解决它:

项目情况:这个项目是公司以前的旧项目,没有源代码,只有服务器上面的 war 包文件。

第一种方法升级 shiro-1.4.jar 到 shiro-1.6.jar,开始干活:

在官网下载了shiro-1.6的相关jar包文件:

shiro-jar-1.4版本升级到1.6版本问题探讨_第1张图片

下载shior-1.6jar 包地址: https://pan.baidu.com/s/1aKpXD1ceugMuoXu0ot16Cw 提取码: 8ay6

然后把项目服务停掉,把shiro-1.4的jar 包删除了,上传1.6的版本jar 包,重启服务器;

呃,启动正常访问不了,查看错误日志:

提示项目jdk的版本不一致!!!!!!

接着查看shiro.jar包的jdk编译版本:

shiro-1.4的jar ,Build-Jdk: 1.8.0_77

shiro-1.6的jar, Build-Jdk: 11.0.7

检查jar包shiro-1.4是jdk1.8编译的,shiro-1.6是jdk11编译的;

所以撤回项目还原了。

决定另外搭建一套环境,配置服务器的jdk为11 版本。

兴奋的启动。。。

呃,结果有出错了:

java.lang.NoClassDefFoundError:javax/xml/soap/SOAPException;

查了很多资料找到问题原因:

jdk9 以下的版本包含:javax.xml.soap 这个模块;

jdk9及以上这个路径下就没有这个模块了,

所以jar包升级失败了。。。此路不通。

下面就开始尝试另外一种方法:修改Shiro源代码AbstractRememberMeManager中的Key值:

可以参考 :https://blog.csdn.net/Dothwinds/article/details/105244830?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2allfirst_rank_v2~rank_v28-4-105244830.nonecase&utm_term=shiro%E6%BC%8F%E6%B4%9E%E6%9C%AC%E5%9C%B0%E4%BF%AE%E5%A4%8D&spm=1000.2123.3001.4430

在shiro 的配置文件 :shiro-context.xml, 进行修改:

DESKey值是写死的:4AvVhmFLUs0KTA3Kprsdag==;

所以修改成动态的Key值就完美解决问题了:

public class GenerateCipherKey {

public static byte[] getCipherKey() {
KeyGenerator kg;
try {
kg = KeyGenerator.getInstance(“AES”);
} catch (NoSuchAlgorithmException e) {
String msg=“shiro 密钥随机生成异常”;
throw new IllegalStateException(msg ,e);
}
kg.init(128);
SecretKey sk = kg.generateKey();
byte[] cipherKey = sk.getEncoded();
return cipherKey;

}
}

你可能感兴趣的:(java,java,后端)