提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
由于Struts2被爆出了远程执行漏洞,现在一个老项目需要升级到2.5.30版本所出现的问题
一、设计到的jar包
asm-7.1.jar
commons-compress-1.20.jar
commons-lang3-3.8.1.jar
javassist-3.22.0-GA.jar
log4j-api-2.12.1.jar
log4j-core-2.12.1.jar
struts2-convention-plugin-2.5.30.jar
commons-fileupload-1.4.jar
commons-io-2.6.jar
freemarker-2.3.31.jar
ognl-3.1.29.jar
struts2-core-2.5.30.jar
struts2-spring-plugin-2.5.30.jar
本次升级,我所在的项目涉及到这些jar包,需要的可以去maven仓库去下载。还有最重要的,需要将xwork-2.0.4.jar删除,因为2.5.30版本中,struts2-core中已经集成了相关内容,不需要重复导入。
二、web.xml的更改
将org.apache.struts2.dispatcher.ActionContextCleanUp注释
<!-- <filter>
<filter-name>struts2Cleanup</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ActionContextCleanUp
</filter-class>
</filter> -->
<!-- <filter-mapping>
<filter-name>struts2Cleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> -->
将org.apache.struts2.dispatcher.FilterDispatcher改为org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
<filter>
<filter-name>struts2</filter-name>
<filter-class>
<!-- org.apache.struts2.dispatcher.FilterDispatcher -->
org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
三、strust.xml的更改
将2.0改为2.5
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
改为
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
在strust.xml中增加
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
在strust.xml中的package中增加regex:.* 这个一定要放在的标签后,要不会报错
在strust.xml中的package中增加strict-method-invocation=“false” 如下:
<package name="default" extends="struts-default" abstract="true" strict-method-invocation="false">
<global-results>
<result name="successPage">/frames/global/success.jsp</result>
<result name="exceptionPage">/frames/global/exception.jsp</result>
</global-results>
<global-allowed-methods>regex:.*</global-allowed-methods>
<global-exception-mappings>
<exception-mapping exception="java.lang.Exception" result="exceptionPage" />
</global-exception-mappings>
</package>
要将strust.xml中 redirect-action 改为redirectAction
<result name="success" type="redirect-action">mainFrame</result>
改为
<result name="success" type="redirectAction">mainFrame</result>
若是不改,会action重定向到jsp时报404
四、jsp中strust相关标签的更改
// 原版本
<s:url id="url" action="login">
<s:set id="str1" value="'string1 value'" />
<s:bean id="bean" name="beanName">
<s:iterator value="tradeList" id="trade" status="status">
<s:set name="myCode" value=" *** "/>
<s:property escape="true" var="someProperty"/>
//新版本
<s:url var="url" action="login">
<s:bean var="bean" name="beanName">
<s:iterator var="trade" value="tradeList" status="status">
<s:set var="myCode" value=" *** "/>
<s:property escapeHtml="true" var="someProperty"/>
总结
以上就是本次改造涉及的所有相关问题。