3

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

如何防止这种情况?

4

2 回答 2

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 中。

所以现在你有了一个标准:

action --> UserAction jsp -----> users/list.jsp

等等

于 2009-04-24T21:07:02.340 回答
1

首先,它不会调用 Register.{1} 方法。它会调用 Register_{1},其中 {1} 可能是一种操作类型(通常是编辑、显示等)

这意味着该 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 配置的末尾

于 2009-04-08T19:46:48.153 回答