Struts2.5的DMI与新增的SMI
Posted LiberStone
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Struts2.5的DMI与新增的SMI相关的知识,希望对你有一定的参考价值。
1问题
解决:在使用Struts2.5之后的版本,在DMI(动态方法调用)上,通配符无法正常使用
2原因
在使用Struts2.5之后的版本,在DMI(动态方法调用)上,在DMI使用时,是默认被禁用的,默认开启SMI模式,导致通配符*无法正常使用
Apache Struts项目的官方解释如下:
从Struts2.3开始,我们增加了一个开关来控制DMI,我们这样做基于两个原因:
1. 如果Action的实现是纯POJO方式(既不继承自ActionSupport也不实现Action接口),这种场景下使用DMI可能导致安全问题。
2. DMI功能跟使用通配符配置Action类的方法有重叠的地方,而通配符配置的方式早在Struts1就有了。
注:DMI(Dynamic Method Invocation)SMI(Strict Method Invocation)
3解决
方式一:暴力关闭
可以将该包的strict-method-invocation="false"设置为false
1 <package name="my" extends="struts-default" namespace="/my" strict-method-invocation="false">
2 <action name="stu_*" class="com.czd.action.tryAction" method="{1}">
3 <result name="a">/page/loginok.jsp</result>
4 <result name="b">/page/loginok.jsp</result>
5 <result name="c">/page/loginok.jsp</result>
6 <result name="d">/page/loginok.jsp</result>
7 </action>
8 </package>
方式二:添加可用
在package包中添加<global-allowed-methods>regex:.*</global-allowed-methods>
1 <package name="my" extends="struts-default" namespace="/my" >
2 <global-allowed-methods>regex:.*</global-allowed-methods>
3 <action name="stu_*" class="com.czd.action.tryAction" method="{1}">
4 <result name="a">/page/loginok.jsp</result>
5 <result name="b">/page/loginok.jsp</result>
6 <result name="c">/page/loginok.jsp</result>
7 <result name="d">/page/loginok.jsp</result>
8 </action>
9 </package>
或者<allowed-methods>add,del,...</allowed-methods>
1 <struts>
2 <constant name="struts.enable.DynamicMethodInvocation" value="true" />
3 <package name="mypack" extends="struts-default">
4 <action name="info*" class="com.stone.struts2.action.MyFirstAction" method="{1}">
5 <result>/{1}info.jsp</result>
6 <allowed-methods>add,del</allowed-methods>
7 </action>
8 </package>
9 </struts>
以上是关于Struts2.5的DMI与新增的SMI的主要内容,如果未能解决你的问题,请参考以下文章
J2EEStruts2.5.10 无法进入Action类的指定方法
错误:NVIDIA-SMI 失败,因为它无法与 NVIDIA 驱动程序通信
nvidia-smi 命令可以与 nvidia 驱动程序 microsoft azure dsvm 通信