Struts2.5的DMI(動態方法調用)與新增的SMI

在使用Struts2.5之後的版本,在DMI(動態方法調用)上,有與之前的版本發生一些改變

在DMI使用時,是默認被禁用的,導致通配符 * 無法正常使用

Apache Struts項目的官方解釋如下:

從Struts2.3開始,我們增加了一個開關來控制DMI,我們這樣做基於兩個原因:

1. 如果Action的實現是純POJO方式(既不繼承自ActionSupport也不實現Action接口),這種場景下使用DMI可能導致安全問題。

2. DMI功能跟使用通配符配置Action類的方法有重疊的地方,而通配符配置的方式早在Struts1就有了。

 

Struts2.5新增的SMI(嚴格方法調用),官方文檔說是擴展DMI。SMI默認情況下是啓用的,如果使用DMI方式調用Action的方法,有兩種方法

1.可以將該包的strict-method-invocation="false" 設置爲false

<package name="my" extends="struts-default" namespace="/my" strict-method-invocation="false">
		<action name="stu_*" class="com.czd.action.tryAction" method="{1}">
			<result name="a">/page/loginok.jsp</result>
			<result name="b">/page/loginok.jsp</result>
			<result name="c">/page/loginok.jsp</result>
			<result name="d">/page/loginok.jsp</result>
		</action>
	</package>

2.在package包中添加<global-allowed-methods>regex:.*</global-allowed-methods>

<package name="my" extends="struts-default" namespace="/my" >
		<global-allowed-methods>regex:.*</global-allowed-methods>
		<action name="stu_*" class="com.czd.action.tryAction" method="{1}">
			<result name="a">/page/loginok.jsp</result>
			<result name="b">/page/loginok.jsp</result>
			<result name="c">/page/loginok.jsp</result>
			<result name="d">/page/loginok.jsp</result>
		</action>
	</package>

這兩種方法都能在Struts2.5版本中實現DMI

本人研究不深,結合自己理解寫下,如果有不當之處,可以指出!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章