首先在网上查阅了一些前人的经验,这里就不一一列举了。
总结一下就是因为stuts漏洞需要修复升级为最新版本2.5.30的,而这个版本中涉及到一些类为jdk7编译,所以至少要升级为7,但是目前其他项目都是JDK8的版本想着就统一一下,不多说了,流程走起。
1.首先会爆出hibernate查询问题,项目中使用的hibernate处理查询,这个版本中由较大的改动,会出现方法xxx引用不明确问题,这个是JDK8进行优化升级后,会自动升级基本类型,导致一些1.6或1.7没有问题但是1.8出现引用不明确的问题。项目中涉及的方法为sql查询,大量引用,解决方式就是将会引起冲突的方法改为明确固定参数,有些确实需要可以可变的但是冲突的可以采用改变方法名称来解决冲突。有
2.org.springframework.cache.ehcache.EhCacheFactoryBean.setMaxEntriesLocalHeap(J)V 缓存报错问题的处理,版本升级后
3.主要是因为要升级struts2,修复漏洞,所以struts2升级为最新版本2.5.30对应项目中
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilte改为org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
4.maven对应版本更新,
Spring2.升级Spring4.x
javassist更新为新版本:
org.javassist
javassist
3.18.1-GA
</dependency
ognl更新为新版本:
ognl
ognl
3.0.19
mvel2更新为新版本:
org.mvel
mvel2
2.2.7.Final
JDBC更新为spring对应版本:
org.springframework
spring-jdbc
${spring.version}
spring核心组件升级:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
struts2升级最新版本:
org.apache.struts
struts2-core
2.5.30
org.apache.struts
struts2-spring-plugin
2.5.30
重点:这个xwork-core要去掉 因为struts2-core 2.5系列中包含了这个包的内容,这个错误会根据服务器版本不同会出现报错问题,也有可能不出现 本地服务启动未出现 centos6.9出现 centons7.6未出现
报错信息:[org.apache.struts2.dispatcher.Dispatcher] -
Unable to load configuration. - bean - jar:file:/alidata/xsgl/20220530/apache-tomcat-9.0.46/webapps/sales/WEB-INF/lib/struts2-core-2.5.30.jar!/struts-default.xml:152:154
重点:ehcache升级到2.4.8 之所以没有升级到2.5.0以上,因为
net.sf.ehcache
ehcache
2.4.8
pom
acegisecurity
2.5以上版本,会出现下面问题:
cheManager with same name ‘default’ already exists in the same VM. Please provide unique names for each CacheManager in the config or do one of following:
cheManager with same name ‘default’ already exists in the same VM. Please provide unique names for each CacheManager in the config or do one of following:
原因是在ehcache2.5版本后,cachemanager必须是单例的,不允许多次创建。
解决办法(未实践不知是否可行)
在config的配置⽂件中,新建⼀个bean,然后署名,在程序引⽤他时,标注这个name为新建的cachemanager
参考:https://wenku.baidu.com/view/aeda8c3217791711cc7931b765ce0508763275bd.html
2.5以下也会出现问题
org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘ehCacheFactoryBean’ defined in class path resource [com/xxxx/xxxx/CacheConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.cache.ehcache.EhCacheFactoryBean]: Factory method ‘ehCacheFactoryBean’ threw exception; nested exception is java.lang.NoSuchMethodError: org.springframework.cache.ehcache.EhCacheFactoryBean.setMaxEntriesLocalHeap(J)V
处理方式,将EhCacheFactoryBean.java进行重写去掉setMaxEntriesLocalHeap方法,因为包中确实不存在。重新编译好处理成功
将<s:set name 改为<s:set var
<s:property escape改为<s:property escapeHtml
<s:iterator id=“” 改为 <s:iterator var=“”
至此基本完成