升級struts2-2.5,其實並沒有想象中的那麼難

最近公司在阿里的服務器總是受到DDOS攻擊,和老大一起查看了攻擊詳情發現是由於struts版本過低,導致被入侵,於是升級了一下struts的版本到2.5,希望可以一次性解決這個問題


首先,替換jar包(注意:並不是圖片裏有的都要放到自己的項目中,自己的項目中用到了哪些,就替換掉哪些,要注意的是:如果你的項目中沒有用到log4j.xml在換成2.5以後,運行tomcat啓動項目,總是會提示你項目中缺少log4j.xml,這個問題自己建立一個log4j.xml放在src下,配一些最基本的東西就可以了,如果原來的項目是log4j.jar要保留,把log4j-api-2.8.2.jar也是要拷貝進去不然的話,在刪除log4j.jar之後會報錯,tomcat啓動不起來

然後刪除自己項目中的xwork-core-2.3.20.jar,因爲這個類庫在struts升級到2.5版本已經包含在了struts2-core中了,所以一定要刪除


之後要在自己的web.xml中修改下面代碼

<filter>

        <filter-name>struts2</filter-name>

        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

</filter>

把  org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 中的.ng 去掉 修改爲

<filter>

        <filter-name>struts2</filter-name>

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

</filter>

修改之後,需要前往struts.xml中 把原先的頭部信息修改爲

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd">

其實也就是把版本換成2.5

在項目裏有jsp的小夥伴們,如果你們用了s標籤,請修改一下幾點

<s:setname="myCode" value=" *** "/>

改成

<s:setvar="myCode" value=" *** "/>

-------------------------------------------------------------------------------------------------------------------------------------

<s:propertyescape="true" var="someProperty"/>

改成

<s:propertyescapeHtml="true" var="someProperty"/>


還有就是

由於新版本的Struts默認不能修改action的訪問後綴,不能使用通配的方式調用action裏的方法,所以添加:

<constant name="struts.enable.DynamicMethodInvocation" value="true"/>

<constant name="struts.enable.SlashesInActionNames" value="true"/>

使得<constant name="struts.action.extension" value="do" />可以生效


如原版本的struts的版本小於等於2.3,且項目進行動態方法配置,則可在全局中添加
<global-allowed-methods>regex:.*</global-allowed-methods>

另外也是最重要的: struts2.5版本適用jdk1.7或者以上