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

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

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

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

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

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

下载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;

}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值