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

FOCUS_ON_AI發表於2020-12-10

原文地址:https://blog.csdn.net/yanyujingzhe/article/details/80244835?utm_medium=distribute.pc_relevant.none-task-blog-baidulandingword-2&spm=1001.2101.3001.4242

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

jar包放在百度雲上自行下載:連結: https://pan.baidu.com/share/init?surl=NGfwEY_PomZC2wG5UOudlw
提取碼:m3n6
複製這段內容後開啟百度網盤手機App,操作更方便哦

首先,替換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或者以上


您可能遇到的錯誤:

(1)Caused By: java.lang.IllegalArgumentException
at com.bea.objectweb.asm.ClassReader.<init>(Unknown Source)
at com.bea.objectweb.asm.ClassReader.<init>(Unknown Source)

參考文章:http://www.mamicode.com/info-detail-2306642.html

 

 

相關文章