Struts2升级版本到2.5.30遇到的一些问题和解决方式_struts2漏洞升到那个版本就没问题了-程序员宅基地

技术标签: spring  java  tomcat  struts  maven  日常问题  

一、背景

  1. 由于Struts2被爆出了远程执行漏洞需要升级版本到2.5.30解决
  2. 目前程序使用的struts2-core版本是2.3.32,spring版本是2.5.6,commons-lang3版本是3.1,jdk版本1.6
  3. maven项目管理

二、解决方案

  1. 升级Struts2-core包版本,升级jdk版本,升级spring版本
  2. 升级Struts2-core包版本,升级jdk版本

三、解决过程

  1. 首先在pom文件中升级Struts2-core包的版本至2.5.30进行个简单的编译看有什么变化,结果程序报错actionContext.getParameters(),在版本升级后的对象类型发生了变化由Map变成了HttpParameters
    在这里插入图片描述
    在这里插入图片描述
    为了避免不影响后面程序的逻辑可以通过新版本的方法toMap()获取map,填充时调用新版本的HttpParameters.create().buildNoNestedWrapping()方法
         Map parmeters = actionContext.getParameters().toMap();
         actionContext.setParameters(HttpParameters.create(parmeters).buildNoNestedWrapping());
    
  2. 修改程序后编译通过,使用jdk1.6启动程序,发现报错百度和查看源码发现要去jdk版本1.7以上
      java.lang.UnsupportedClassVersionError: org/apache/lucene/store/Directory :
       Unsupported major.minor version 51.0
    
    在这里插入图片描述
  3. 升级jdk版本到1.8,那么对应的spring版本也需要升级,否则会报错,当前jdk版本的spring不支持注解
        [org.springframework.context.annotation.ComponentScanBeanDefinitionParser]
         are only available on JDK 1.5 and higher  
    
  4. 在pom文件修改spring相关版本到4.3.29.RELEASE 进行编译,此次报错惨不忍睹,比如spring-jdbc在新版本中已经大变样,许多方法都被弃用,而程序中的dao层相关程序过多无法短时间修改,风险太高,所以通过参考博客–link在src文件夹加org.springframework.core包,并添加一个JdkVersion.java文件使注解能够识别jdk8,取代升级spring版本带来的风险和麻烦。
  5. 添加jdk8兼容版本配置后再次启动程序发现报错
       Dispatcher initialization failed java.lang.RuntimeException:
       java.lang.reflect.InvocationTargetException
    
    web.xml中的Struts过滤器的类地址发生了变化需要修改去掉ng目录
    在这里插入图片描述
  6. 修改后再次启动报错,查看错误和commons.lang3包有关系,通过mavenTree查看发现有明显冲突,查看Struts2-core包内的commons.lang3的版本是3.8.1
       com.opensymphony.xwork2.inject.ContainerImpl$ConstructorInjector
       File: ContainerImpl.javaMethod: constructLine: 425 - 
       com/opensymphony/xwork2/inject/ContainerImpl.java:425:-1Caused by:
       Caused by: java.lang.NoSuchMethodError:
       org.apache.commons.lang3.text.StrSubstitutor.setValueDelimiter(Ljava/lang/String;)Lorg/apache/commons/lang3/text/StrSubstitutor;
       at com.opensymphony.xwork2.config.providers.EnvsValueSubstitutor.<init>(EnvsValueSubstitutor.java:35)
    
  7. 修改pom文件commons.lang3的版本至3.8.1后再次编译启动有报错ActionContext.getParameters()Ljava/util/Map; NoSuchMethodError,这个getParameters()问题在步骤一中解决过,而且应该是在编译时报错的,那么就说明这个方法不是来自于自己写的代码,根据错误信息排查了一下果然发现是引用的一个jar用的是老版本Struts2,且调用了getParameters()这个方法,我们运行中在调用这个方法时出现了问题,然后修改了对应的jar包
  8. 再次使用jdk8启动没有了问题,程序也可以正常运行

三、待解决

  1. 本地可以启动运行程序了,但线上还没试过,可能还会有jdk1.6到1.8的一些坑得解决,比如说jvm在版本中变化较大,得考虑相关的参数调整等等
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43288999/article/details/124328422

智能推荐

oauth2 token为空拦截_配合OAuth2进行单设备登录拦截-程序员宅基地

文章浏览阅读1.1k次。要进行单设备登录,在其他地点登录后,本地的其他操作会被拦截返回登录界面。原理就在于要在登录时在redis中存储Session,进行操作时要进行Session的比对。具体实现,假设我们的OAuth 2的登录调用接口如下:共享Session,User模块跟OAuth模块都要设置@Configuration@EnableRedisHttpSessionpublic class SessionConfig..._oauth2token为空回到登录页

ChatGPT:深度拆解(24H限时下载)_chatgpt服务器,深度拆解-程序员宅基地

ChatGPT是由OpenAI团队发布的聊天机器人软件,具有类人的语言理解和表达能力,引起了人工智能产业的革命。OpenAI是一家非营利的人工智能研究公司,成立于2015年。他们使用监督学习和奖励机制反馈的策略生成了优化的ChatGPT模型。

OpenCV 笔记(30):图像降噪算法——非局部均值滤波-程序员宅基地

文章浏览阅读688次,点赞30次,收藏30次。1. 非局部均值滤波非局部均值滤波(Non-Local Means,NL-Means)是一种非线性的图像去噪算法。它基于图像中的像素具有相似结构这一假设,利用图像的全局信息来对图像进行去噪。1.1 全局算法 VS 局部算法非局部均值滤波在计算每个像素点的估计值时,会考虑图像中所有与该像素点具有相似邻域结构的像素点。因此,非局部均值滤波是一种全局算法。那么相对于全局算法的局部算法是什么呢?局部算法...

Linux下生成动态链接库是否必须使用 -fPIC 的问题[转]-程序员宅基地

文章浏览阅读43次。在 Linux 下制作动态链接库,“标准” 的做法是编译成位置无关代码(Position Independent Code,PIC),然后链接成一个动态链接库。经常遇到的一个问题是 -fPIC 是不是必需,因为好像不加经常也能正常运行,只是创建 .so 的时候会有一个警告。搜索、试验了一下,答案似乎是这样:(1) 通常的建议是始终加上 -fPIC 生成位置无关代码;(2) AMD64 ...

整数划分的递归实现算法,并输出所有划分(Java)_【问题描述】编程实现某整数的划分的输出【样例输入】6【样例输出】65+14+24+1+13-程序员宅基地

文章浏览阅读4k次,点赞18次,收藏36次。整数划分的递归实现算法,并输出所有划分(Java)依旧是算法作业,这次是整数划分问题。在网上找了半天,大多都是求整数划分有多少种,很少求详细的划分情况。有也都是C语言版的,并找不到Java的。于是我便想出一个Java的(其实差不多,只是如果有人需要Java版的方便搜到)..._【问题描述】编程实现某整数的划分的输出【样例输入】6【样例输出】65+14+24+1+13

Netty 搭建 TCP服务器(一)_netty起一个tcp-程序员宅基地

文章浏览阅读4.2k次,点赞2次,收藏11次。需求ipad点击弹出客户端相应操作,需要软件客户端在windows系统上自动弹出软件界面,前提是软件客户端在后台已经开启。设计思路ipad发送点击消息到websocket服务器,websocket服务器和tcp服务器交互(消息通信),tcp服务器推送消息到客户端,客户端弹出界面。流程图:设计代码项目使用gradle构建、springboot框架。搭建tcp服务器采用netty,一是ne..._netty起一个tcp

随便推点

鸿蒙Fraction界面跳转到AbilitySlice界面_鸿蒙手表开发屏幕右滑时返回上一个abilityslice-程序员宅基地

文章浏览阅读216次。无_鸿蒙手表开发屏幕右滑时返回上一个abilityslice

Elasticsearch 查询数据的工作原理是什么?-程序员宅基地

文章浏览阅读332次。来源:8rr.co/GsAa面试题ES 写入数据的工作原理是什么啊?ES 查询数据的工作原理是什么啊?底层的 Lucene 介绍一下呗?倒排索引了解吗?面试官心理分析问这个,其实面试官就..._elasticearch 数据轮询

Hexo | (一)使用Hexo+Pages搭建个人博客-程序员宅基地

文章浏览阅读312次。本篇主要介绍使用Hexo+Pages搭建个人博客的流程。使用 Hexo 博客框架搭建,解析markdown文章,生成静态页面,将页面托管到 github / coding 服务器上。github / coding 都有pages 服务,提供免费的静态网页托管和演示服务。搭建步骤:安装git,nodejs安装hexo本地搭建站点(线下访问)部署到github/coding(线上访问)站..._hexo page

python下载torch库_python torch库的下载-程序员宅基地

文章浏览阅读2.2k次,点赞4次,收藏8次。python下载torch库。_python torch库的下载

js中文汉字转拼音详细教程_js 实现汉字转拼音-程序员宅基地

文章浏览阅读708次,点赞12次,收藏11次。/ 引入字符编码(JSON)_js 实现汉字转拼音

keil怎样将c语言多个程序合并,keil多个子程序合并问题-程序员宅基地

文章浏览阅读5.5k次。本人以前学单片机时学的是汇编,所以C语言的keil单片机编程不是很懂,我打算做一个酒精测试仪的课程设计,这个是我网上找到的程序代码,我试着编译,但是总是报错,想问问各位大师怎么解决,是设置的问题么,希望能有详细的解答,最好附图解答。以下是程序代码:一:主程序#include#include#include#include#include#include#define uint unsigned i..._keil如何合并两个main函数