3

使用 Struts2 约定插件时,即使未定义,插件也会自动转发hello-world.action请求。/WEB-INF/content/hello-world.jspHelloWorld.java

请参阅http://struts.apache.org/release/2.1.x/docs/convention-plugin.html

另一方面,我们将 JSP 文件放在 WEB-INF 下以避免对 JSP 文件的任何直接访问。

我认为约定插件的这种行为破坏了 JSP 访问策略。任何人都可以通过简单地调用动态构建操作来直接访问 JSP。

我对么?!如果是,我们可以禁用此功能吗?

4

1 回答 1

2

不,你不太正确。如果页面位于WEB-INF. 约定插件按照约定从类中创建附加到基于 XML 的配置Action。因此,您只能访问这些操作返回的结果。约定插件将其配置放置在 XWork 包下,如文档和答案中所述。因此,如果您不指定父包,则可以解决冲突。您还可以使用约定注释来自定义生成的配置。默认情况下,约定插件会扫描基本包下的类,这些类可以是strutsactions配置的,并且具有Action后缀。这些都是约定插件的默认配置。如果您想更改默认设置,可以使用常量标签 instruts.xmlstruts.properties.

但是,文档并不清楚它是如何处理的

由 URL 标识的无操作结果

此外,还不清楚使用什么 URL 来识别它。我想您已经熟悉无操作配置,您可以在不执行操作的情况下返回结果 SUCCESS,因为默认使用操作类。但是,问题甚至不在这里。上面提到的约定插件连同它创建的配置还放置了一个未知的处理程序,该处理程序应该处理不存在配置的 URL(即不是由约定创建的)。这就是问题的根源。该插件也不允许替换/覆盖配置。令人高兴的是,有未知的处理程序管理器(如果需要可以替换)谁通过迭代处理未知操作"unknown-handler-stack",由该经理管理。使用处理程序堆栈,您可以配置迭代未知处理程序的顺序。请注意,当处理程序返回操作配置时,循环结束。这意味着如果您创建自己的未知处理程序并在堆栈中设置顺序,则可以绕过约定处理程序。
.

于 2013-12-27T10:54:47.323 回答