一尘不染

WEB-INF下的Struts 2 Convention Plugin和JSP文件

jsp

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

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

我认为常规插件的这种行为破坏了JSP访问策略。任何人都可以通过简单地调用a,即时构建动作来直接访问JSP。

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


阅读 233

收藏
2020-06-10

共1个答案

一尘不染

不,您不太正确。如果页面位于下方,则无法直接访问WEB- INF。约定插件Action通过约定从类中为基于XML的配置创建了其他功能。因此,您只能访问那些操作返回的结果。约定插件将其配置放置在XWork包下,如docs和答案中所述。因此,解决冲突是可能的,如果您不指定父包。您还可以使用约定注释来自定义生成的配置。该公约插件默认扫描为基础包下的类,这可能是struts或者actions是可配置的,并有Action后缀。这些都是约定插件的默认配置。如果您想更改默认设置,可以在中使用常量标签struts.xml或中的相应属性struts.properties

但是,文档尚不清楚其处理方式

__URL识别的 无效 结果

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

2020-06-10