升級Struts2.5後使用DMI動態方法呼叫遇到問題
阿新 • • 發佈:2019-02-17
問題:
升級Struts2.5後使用DMI動態方法呼叫報錯,method 找不到。
原始碼:
struts.xml
<action name="json_*_*" class="{1}Action" method="{2}">
<result name="success" type="json"></result>
<result name="error" type="json"></result>
<result name="input" type="json"></result>
</action>
分析:
目前情況:
json_record_list.action
訪問不會報錯。
json_record_query.action
訪問報錯。
呼叫Action中list方法時並沒有報錯,隨後呼叫query方法時報錯,問題鎖定方法名。改為隨意字串abcdeq之類方法名都會報錯,就是說只有特定方法名才可以。所以懷疑struts某處有關於方法名的預設設定。百度後得知Struts2.5新增了allowed-methods配置,只有被允許的方法名才可以動態呼叫。
解決辦法:
在配置檔案struts.xml中新增:<global-allowed-methods>regex:.*</global-allowed-methods>
<package name="exam" extends="json-default">
<global-allowed-methods>regex:.*</global-allowed-methods>
<action name="user" class="userAction">
...
</action>
</package>
或者在某一action內新增<allowed-methods>regex:.*</allowed-methods>
註解方式:
在 action 上使用 @AllowedMethods 註解
預設的設定:
<global-allowed-methods>execute,input,back,cancel,browse,save,delete,list,index</global-allowed-methods>