1. 程式人生 > >struts2.5.16版本升級

struts2.5.16版本升級

這次struts2版本升級,也是因為要修復安全漏洞CVE-2018-1327。在舊版本升級新版本的過程中,遇到了不少問題,在這裡記錄一下。

struts2.5.16版本下載連結:http://mirrors.hust.edu.cn/apache/struts/2.5.16/struts-2.5.16-all.zip

jackson-dataformat-xml-2.1.2.jar下載連結:http://repo1.maven.org/maven2/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.1.2/jackson-dataformat-xml-2.1.2.jar

1.架包替換

struts2升級到2.5.16版本,大概需要替換更新的架包如下:

struts2-core-2.5.16.jar、struts2-json-plugin-2.5.16.jar、log4j-api-2.10.0.jar、xstream-1.4.10.jar、commons-io-2.5.jar、commons-lang3-3.6.jar

commons-fileupload-1.3.3.jar、freemarker-2.3.26-incubating.jar、javassist-3.20.0-GA.jar、jackson-annotations-2.9.0.jar、jackson-core-2.9.4.jar

jackson-databind-2.9.4.jar、jackson-dataformat-xml-2.1.2.jar、struts2-rest-plugin-2.5.16.jar

刪掉xwork-core-2.3.28.1.jar

其他jar請根據自己的工程補充。

2.新的類StrutsPrepareAndExecuteFilter

在原來的web.xml中,我們指定了filterstruts2的處理類,這個類在新的架包中,路徑發生了變化:

舊:org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

新:org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter

所以需要更新web.xml

3.index方法找不到

在老版本struts中,action如果不寫方法名稱,或者請求不指定特定的方法,struts就會預設呼叫execute方法。但是在新版本中,rest架包的RestActionMapper指定了預設的方法是index。就會出現錯誤

get方法報錯Wrong method was defined as an action method:index

post方法報錯Wrong method was defined as an action method:create


這個錯誤可在struts.properties中新增兩個配置項解決

struts.mapper.indexMethodName=execute

struts.mapper.postMethodName=execute


4.方法不被允許

如果url中帶有方法名,如index.action!getList,在struts2.5.16中,會報錯誤Method xxx for action xxx is not allowed!


需要在struts.xml中,設定所有方法都被允許


global-allowed-methods在package中的位置必須是在所有action之前,在所有其他global之後,不然就會報錯

需要注意的是global-allowed-methods這個屬性只在同一個package中起作用

5.新的action對映關係

在struts2.5.16中,struts2會讀取namespace並做匹配。

如果你的url是多層的,如:/aaa/bbb

在老版本的struts中可能不需要定義action”bbb”的namespace就可以正常使用

但是在新版本中,如果你的action沒有定義namespace,action定義成"bbb",struts2會將aaa當做action去做匹配,找不到就報錯誤,但是又不提示你是哪個action。

所以需要加上一個namespace=“/aaa”。

6.json型別資料處理

如果使用了rest架包,可能會導致json資料異常。

在rest架包中,預設json資料是由JacksonLibHandler類(struts2-rest-plugin-2.5.16.jar)處理的

而不使用rest的架包的時候,json資料,是由JSONResult類(struts2-json-plugin-2.3.28.1.jar)處理的。

JSONResult會自動從ACTION類中取出變數構造成json資料

這個變數是sturts自動選取的,選取判斷依據暫時沒有弄清楚,

或許我們可以通過在<result type="json"><paramname="root">變數名</param></result>進行人為指定,

這個可以試一下看是否生效。)

為了在rest中讓json資料重新由JSONResult處理,我們需要將json型別的處理類手動指定為HtmlHandler。

我們需要修改兩個檔案

struts.xml 增加一個bean=“myJson”的配置,class指定為org.apache.struts2.rest.handler.HtmlHandler


struts.properties 配置struts.rest.handlerOverride.json=myJson,struts.rest.content.restrictToGET=false

7.action配置中的method屬性沒有用

在action中指定了呼叫的method,但是實際上呼叫的還是index或者execute。

在com.opensymphony.xwork2.DefaultActionProxy中找到程式碼

可以看出,當method不為空的的時候,不會將action中配置的method傳遞過來

所以,而從url中生成的這個method,又是預設生成的,所以,我們需要將預設的method設定為空

8.標籤屬性更新

在struts2.5版本中,iterator標籤屬性id,set標籤屬性var、name,append標籤屬性id等都被移除。

但是因為程式已經發布出去,要修改我們自己的jsp,涉及的改動比較大,最好還是讓struts2相容一下舊版本。

所以,我們可以通過修改struts-tags.tld檔案來恢復支援相容。

要修改的檔案有兩個:

struts-core-2.5.16.jar/META-INF/struts-tags.tld

a)append新增一個name="id"的attribute

b)iterator新增一個name="id"的attribute

c)set新增一個name="id"的attribute,一個name="name"的attribute,set還要將name="var"的required修改為false

反編譯struts-core-2.5.16.jar中的org.apache.struts2.views.jsp.ContextBeanTag,增加方法setId

以上為轉載

這裡本人碰到的問題:多加了struts2-rest-plugin-2.5.16.jar這個jar包,導致永遠404.

(因為我的jar包是直接從示例專案中copy過去的)

參考:https://blog.csdn.net/weixin_38167954/article/details/80049097

https://blog.csdn.net/qq_24059599/article/details/51986761

相關推薦

struts2.5.16版本升級

這次struts2版本升級,也是因為要修復安全漏洞CVE-2018-1327。在舊版本升級新版本的過程中,遇到了不少問題,在這裡記錄一下。struts2.5.16版本下載連結:http://mirrors.hust.edu.cn/apache/struts/2.5.16/st

struts2.5.16版本升級

這次struts2版本升級,也是因為要修復安全漏洞CVE-2018-1327。在舊版本升級新版本的過程中,遇到了不少問題,在這裡記錄一下。struts2.5.16版本下載連結:http://mirrors.hust.edu.cn/apache/struts/2.5.16/st

MySQL 5.6升級至MySQL 5.7--------版本升級最佳實戰

mysql dba1. 背景 MySQL 5.7是當前MySQL最新版本,與MySQL 5.6版本相比,有如下特征  * 性能和可擴展性:改進 InnoDB 的可擴展性和臨時表的性能,從而實現更快的網絡和大數據加載等操作。 * JSON支持:使用 MySQL 的 JSON 功能,你可以結合 NoSQL

MySQL5.6到5.7版本升級采用IN-PLACE的升級方式需要具體關註的地方

null mysq 限定 replicate 有效 lac switch 錯誤 cat 一.SQL變更GET_LOCK()函數行為MySQL 5.7.5之前GET_LOCK()在執行第二次的額時候會釋放前面獲得的鎖,在此版本以後支持同時獲得多個鎖,如:mysql>

SSH最新框架整合-spring5.0.8+hibernate5.3.2+struts2.5.16(JDK9)

這幾天學習了下SSH框架,(如果現在還想學SSH框架的勸退,原因呢自己百度就知道了),發現在整合的過程中出現各種問題,網上也沒有比較好的整合部落格,基本都是過時的部落格不太適合學習(主要是框架更新較快,會發生巨大變化,也許幾年後你看到這篇部落格時它也已經過時了),現在記錄一下

騰訊雲 centos6.5 PHP版本升級php7

處理有php 及 php擴充套件: 如果之前已經安裝過PHP的話 yum remove php* php-common 安裝php7的yum源 與上面安裝nginx、MySQL的方式一樣,先更新yum源然後再安裝yum源 rpm -ivh https://dl.fe

基於Struts2.5.16的呼叫過程

引用一張Struts2呼叫的時序圖:1.使用者傳送請求;這個請求被交給你在web.xml檔案配置的過濾器(Filter)struts2的過濾器(StrutsPrepareAndExecuteFilter)一般都是在最後一個。呼叫其doFilter方法。 <filt

初學struts2.5.16.all:我為填坑帶鹽

1.下載 2.匯入什麼 這是我很疑惑的問題,各個網站教程很多沒更新,裡面寫的匯入什麼可能都不是最新的,那麼到底該怎麼匯入呢?解壓之後,觀察一下目錄: 找到:\struts-2.5.16\apps 裡面有: struts2-rest-showcase

struts2.5.12版本使用action萬用字元提示找不到action的問題

我配置了一個PageAction <action name="*" method="{1}" class="com.cheng.web.action.PageAction"> <result name="success">/p

Struts2升級到2.5.16

    在對專案進行安全檢測的時候發現因為Struts2版本的問題,專案存在著很大的漏洞。因此需要對Struts2進行升級,解決漏洞。     直接將Struts2升級到最新版本2.5.16。     首先需要下載struts2.5.16的

struts2.5版本中使用DMI遇到問題

row user 正則 覆蓋 class lob reg -m 配置文件 struts2.5 為了提升安全性,添加了 allomethod 這麽個玩意。 解決方法是在配置文件中添加: <package name="exam" extends="json-def

webpack4.5.0+vue2.5.16+vue-loader 實戰組件化開發案例以及這些版本中踩的一些大坑!!!

解決 har XP vue png 錯誤 type demo 選項 一 vue-loader 我們先不管腳手架,只說vue-loader,簡單講就是可將.vue文件打包,實現組件化開發,即一個.vue文件就是一個組件,開發中只需要引入這個.vue組件就可以了! 然後.vue

Linux下升級Python到3.5.2版本

方法 logs 支持 行修改 make bin tar etc img 原文出處:https://www.cnblogs.com/tssc/p/7762998.html 本文主要介紹在Linux(CentOS)下將Python的版本升級為3.5.2的方法 眾所周知,在202

配置struts-2.5.16必需jar包Struts2的特性變動

lib TP 原來 圖片 -c xwork src 新版 bsp 必需jar包,舊版本:    必需jar包,新版本:    在struts-2.5.16版本的lib目錄下沒有xwork-core的jar包,原因是被合並到struts-core這個jar裏了。所謂core嘛

Struts2版本升級到2.3.34

    Struts2現在的最新版本是2.5.16.最近要上線一個專案,經過Acunetix安全掃描,struts2存在安全漏洞,需要對struts2進行升級。檢視專案,專案本身使用的struts版本是2.2.     現在的struts2版本,相對安全的

Linux MySQL 5.7二進位制 小版本升級

Linux MySQL 5.7二進位制 小版本升級 MySQL5.7二進位制安裝在Unix/Linux上升級時,分為就地和邏輯升級方法。 1 就地升級 就地升級包括關閉舊的MySQL伺服器,用新的MySQL伺服器替換舊的MySQL二進位制檔案或軟體包,在現有資料目錄上重新啟動MySQL,以及執行mysq

Linux MySQL 5.7二進制 小版本升級

dev 服務器 Xtraback man lan mysql 內容 數據量 更改 Linux MySQL 5.7二進制 小版本升級 MySQL5.7二進制安裝在Unix/Linux上升級時,分為就地和邏輯升級方法。 1 就地升級 就地升級包括關閉舊的MySQL服務器,用新的

KaOS 2018.10釋出於KDE Plasma 5.14桌面,Wayland 1.16版本

KaOS很高興地宣佈10月釋出新的穩定ISO,KaOS 2018.10。 KaOS 截圖 KaOS 介紹 KaOS是一份桌面Linux發行版,其特色在於最新版本的 KDE 桌面環境及其他流行的使用Qt工具包的軟體程式。 它最初基於Arch Linux,但從2013年四月起,開發者們開

Centos6.5跨越大版本升級到Centos7.4

升級原因 隨著技術升級,新科技的更新換代,作業系統的版本到現在也從Centos5.X過度到了最新的Centos7.5。 近期計劃要使用Kubernetes服務,最新版本更好的相容Centos7.X系列系統,由於遠端Server都是通過私有云提供的,這樣我們重

Centos6.5下進行PHP版本升級

統計外掛WP Statistics要求PHP5.4以上,可本機PHP為5.3.3,無奈只有對伺服器PHP進行升級,遂寫下本文。Step1:檢視安裝伺服器當前安裝版本 php -VStep2:檢視當