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

本人研究不深,结合自己理解写下,如果有不当之处,可以指出!

 

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