Struts2的官网公布了一个远程命令执行漏洞,官方强烈建议升级到2.3.15.1或者以上版本,该版本包含校正过的struts2核心库。

我们之前开发项目主要采用的Struts2版本是2.2.1,本文介绍下Struts2从2.2.1升级到2.3.15.1的过程。

首先自Struts官方网站下载struts-2.3.15.1-all.zip,里面包含所需要的jar。

删除项目中如下jar文件:

将struts-2.3.15.1-all.zip中的如下jar文件加到项目中:

升级jar之后,测试项目,发现2个问题,第一个问题,控制台会经常输出如下信息:

*********************************************************************** 
*                              
WARNING!!!                           

*                                                                    

* >>> ActionContextCleanUp<<<
is deprecated! Please use the new filters! * 
*                                                                    

*          
This can be a source of unpredictable
problems!           * 
*                                                                    

*             
Please refer to the docs for more
details!            

*           
http://struts.apache.org/2.x/docs/webxml.html           

*                                                                    

***********************************************************************

意思是说ActionContextCleanUp过期,不建议使用,查看了

http://struts.apache.org/2.x/docs/webxml.html,没有看出所以然,后来在论坛中有人说Struts的过滤器org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter包含了ActionContextCleanUp功能,所以注释掉web.XML文件中的ActionContextCleanUp过滤器即可。

注意如果struts2过滤器不是

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter的话,要修改成这个。

当然上述问题是个警告,如果说警告不予理睬的话,第二个问题是控制台抛出错误,这个就要解决了。

抛出错误的情况是:代码在执行某些数据保存的时候,会抛出异常,但是数据依然能保存,从前台功能上看没有任何问题。

后台异常堆栈信息:

16-04-01
02:33:49.017 ERROR [CommonsLogger.java:38] 
Developer Notification (set struts.devMode to false to disable this
message):

Unexpected
Exception caught setting 'formName' on 'class net.jqsoft.XXXX.manager.XXXX.QuestionAnswer:
Error setting expression 'formName' with value ['dataListForm', ]

Error
setting expression 'formName' with value ['dataListForm', ] - [unknown
location]

at
com.opensymphony.xwork2.ognl.OgnlValueStack.handleRuntimeException(OgnlValueStack.java:197)

at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:174)

at
com.opensymphony.xwork2.ognl.OgnlValueStack.setParameter(OgnlValueStack.java:148)

at
com.opensymphony.xwork2.interceptor.ParametersInterceptor.setParameters(ParametersInterceptor.java:318)

at
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(Parameters

异常信息说的很清楚,只要关闭struts.devMode(开发模式)就不会抛出这些信息,尝试设置struts.devMode=false,果然不再抛出异常。

但是还是不放心,想知道到底为什么?参考论坛上的说法,Action中的所有属性都要加上seter、geter方法,检查下,都加上了,还是不行。

然后在action中添加private
string formName,并生成seter、geter,测试发现抛出下面的问题:

Unexpected Exception caught setting ' showNum ' on .........

然后在action中添加private
string showNum,并生成seter、geter,依次下去,最终问题解决。

总结下,原来Struts2.3.15.1检查的比较严格,凡在前端界面form中所有的name=’xxx’,action中都要有对应的属性,哪怕action端不需要使用这个name,也要加上。

搞明白了,可以放心的把struts.devMode=false,或者把代码写的严谨点,不需要的<input  name=’xxx’>不要写。

最后总结下升级过程:

1、     
替换jar

2、     
注释web.xml文件中的

<filter>

<filter-name>struts2CleanUpFilter</filter-name>

<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>

</filter>

<filter-mapping>

<filter-name>struts2CleanUpFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

3、     
修改struts.properties文件中的struts.devMode =  false

Struts2版本升级到struts2 2.3.15.1操作说明的更多相关文章

  1. Struts2入门2 Struts2深入

    Struts2入门2 Struts2深入 链接: http://pan.baidu.com/s/1rdCDh 密码: sm5h 前言: 前面学习那一节,搞得我是在是太痛苦了.因为在Web项目中确实不知 ...

  2. Struts2入门1 Struts2基础知识

    Struts2入门1 Struts2基础知识 20131130 代码下载: 链接: http://pan.baidu.com/s/11mYG1 密码: aua5 前言: 之前学习了Spring和Hib ...

  3. Struts2笔记02——Struts2 概述(转)

    原始内容:https://www.tutorialspoint.com/struts_2/basic_mvc_architecture.htm Struts2是基于MVC设计模式的一种流行.成熟的We ...

  4. Struts2学习一----------Struts2的工作原理及HelloWorld简单实现

    © 版权声明:本文为博主原创文章,转载请注明出处 Struts2工作原理 一个请求在Struts2框架中的处理步骤: 1.客户端初始化一个指向Servlet容器(例如Tomcat)的请求 2.这个请求 ...

  5. Struts2 Convention Plugin ( struts2 零配置 )

    Struts2 Convention Plugin ( struts2 零配置 ) convention-plugin 可以用来实现 struts2 的零配置.零配置的意思并不是说没有配置,而是通过约 ...

  6. 1.Struts2简介和Struts2开发环境搭建

    一.Struts2简介: 1.什么是Struts2? 著名的SSH三大框架分别为:表现层(Struts).业务逻辑层(Spring),持久化层(Hibernate). Struts2是在WebWork ...

  7. struts2总结六: Struts2的拦截器

    一.Struts2的系统结构图

  8. Struts2框架(8)---Struts2的输入校验

    Struts2的输入校验 在我们项目实际开发中在数据校验时,分为两种,一种是前端校验,一种是服务器校验: 客户端校验:主要是通过jsp写js脚本,它的优点很明显,就是输入错误的话提醒比较及时,能够减轻 ...

  9. Struts2入门(七)——Struts2的文件上传和下载

    一.前言 在之前的随笔之中,我们已经了解Java通过上传组件来实现上传和下载,这次我们来了解Struts2的上传和下载. 注意:文件上传时,我们需要将表单提交方式设置为"POST" ...

随机推荐

  1. Win8开虚拟wifi ‘无法启动承载网络 组或资源的状态不是执行请求操作的正确状态“

    第一步,首先我们点开开始按钮菜单,要右键以“管理员身份”打开CMD“命令提示符”并键入或者复制(粘贴)命令:netsh wlan show drivers 查看本机无线网卡是否支持此项Wifi热点共享 ...

  2. chrome经常崩溃解决过程

    之前chrome常崩溃,也没有找到原因,就将就着用吧,一直用到今天,今天连续几次崩了,突然想到,难道是因为我访问的域名没有解析(能想到这个,是因为今天分配公司域名测试的时候常输错),于是就输入一个不存 ...

  3. Codeforces Round #375 (Div. 2) F. st-Spanning Tree

    传送门 分析:构造题.可以这么想:先把s,t两个点去掉,把剩下的点先并查集合并.这样会出现个集合:, , 个剩余集合.那么个集合中先把只能与或中一个相连的连起来,如果这样已经超出了要求,那么就不能构造 ...

  4. CSS3的@keyframes用法详解:

    CSS3的@keyframes用法详解:此属性与animation属性是密切相关的,关于animation属性可以参阅CSS3的animation属性用法详解一章节. 一.基本知识:keyframes ...

  5. b/s 读取多个FTP文件(图片,视频)压缩到服务器 下载到客户端

    其实需求是这样, 要做一键导出, 有图片,有照片,youhtml,存在不同的文件夹,每次下载都必须下载最新数据,因为FTP是随时更新的. 1.这要是一直下载下载,浏览器一直跳窗口,蛋疼的我都看不下去. ...

  6. CentOS_7.2编译安装PHP_5.6.20添加扩展模块

    添加ZendGuardLoader扩展: # 解压ZendGuardLoader.so到"/usr/local/php/lib/php/extensions/no-debug-non-zts ...

  7. NXOPEN环境配置

    1.找到NX中的vc文件夹 D:\study software\NX\NX9.0\UGOPEN\vs_files

  8. redis配置

    # Redis 配置文件 # 当配置中需要配置内存大小时,可以使用 1k, 5GB, 4M 等类似的格式,其转换方式如下(不区分大小写)## 1k => 1000 bytes# 1kb => ...

  9. 深入replace

    replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串. stringObject.replace(reg/str,str/replacement); 这里主 ...

  10. android app 提示信息

    Toast.makeText(this,"You cannot have less than 1 coffee",Toast.LENGTH_SHORT).show();TextVi ...