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

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值