Struts2,使用方法的最佳实践= {1}

时间:2009-04-08 13:03:13

标签: java xml struts2 struts

我是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错误(这将被正确记录为错误)。

如何防止这种情况?

2 个答案:

答案 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配置的末尾