最近公司在阿里的服務器總是受到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" />可以生效