我是Struts 2的新手,我遇到过这种语法(在教程中推荐)。
<action name="Register_*" method="{1}" class="Register">
<result name="input">/member/Register.jsp</result>
<result type="redirectAction">Menu</result>
</action>
据我所知,它调用了Register。{1}方法。问题是用户可能会输入另一个(随机)值并导致500错误(这将被正确记录为错误)。
如何防止这种情况?
答案 0 :(得分:8)
在我的应用程序中,我们使用它:
<action name="*/*" class="{1}Action" method="{2}">
<interceptor-ref name="CustomAuthStack" />
<result>/pages/{1}/{2}.jsp</result>
<result name="input">/pages/error/denied.jsp</result>
<result name="logout">/pages/error/denied.jsp</result>
<!-- methods that come back to listing after processing -->
<result name="remove" type="redirectAction">{1}/list</result>
<result name="save" type="redirectAction">{1}/list</result>
<result name="enable" type="redirectAction">{1}/list</result>
....
</action>
对于像myapp / users / list这样的斜杠,你必须使用
启用斜杠<constant name="struts.enable.SlashesInActionNames" value="true" />
在strus.xml中。
所以现在你有一个标准:
动作 - &gt; UserAction jsp -----&gt;用户/的List.jsp
等
答案 1 :(得分:1)
首先,它不会调用Register。{1}方法。它会调用Register_ {1},其中{1}可能是一个动作类型(通常是编辑,显示e.t.c)
表示URL实际上是
Register_View
Register_Edit
e.t.c.
因此,如果用户手动将URL更改为不存在的内容,例如
Register_methodThatDoesNotExist
然后struts 2将返回错误。
但为什么这是一个问题呢?在任何使用任何技术的Web应用程序中,如果用户使用URL手动篡改,将返回错误(也是404)
你想要完全阻止什么?
<强>更新强>
要防止500个错误,您可以捕获所有操作(与任何规则不匹配)并在错误页面中重定向它们。 请参阅struts 2 wiki上的“Wildcard Default”默认段落
http://cwiki.apache.org/WW/action-configuration.html
必须位于struts配置的末尾