/struts/webconsole.html 在设置 Struts2 devMode=false 后仍在工作



我在struts.xml中设置了以下配置参数:

<constant name="struts.devMode" value="false" />
<constant name="struts.configuration.xml.reload" value="true" />
<constant name="struts.i18n.reload" value="false" />

struts.propertiesstruts.devMode=false

webconsole.html页面仍在加载中。如何解决此问题?

devMode属性与webconsole无关,它只做这些事情:

  • 启用后,Struts 2 将在每次请求时重新加载资源包(这意味着您可以更改.properties文件,保存它们,并查看下一个请求中反映的更改)。
  • 它还会在每个请求上重新加载您的 xml 配置文件 ( struts.xml )、您的验证文件等。这对于测试或微调配置非常有用,而无需每次都重新部署应用程序。
  • 第三,也许是不太广为人知的设置,因此是造成很多混乱的根源:它将提高调试或通常可忽略的问题为错误的水平。例如:当您提交无法在操作'someUnknownField'上设置的字段时,通常会忽略该字段。但是,当您处于开发模式时,将引发异常,告诉您提交的字段无效。这对于调试或测试大型表单非常有用,但如果依赖于请求中的参数,这些参数不是在操作上设置的,而是直接在视图层中使用的,则也可能令人困惑(警告:不好的做法,您应该始终验证来自 Web 的输入)。

我假设你来自这里,我的建议是:你不应该甚至可以在生产计算机上部署此组件。

只需在标签内写下以下行<struts>即可。

<constant name="struts.action.excludePattern" value="/struts/webconsole.html" />
即使您将

devMode参数设置为 false,即使调试拦截器根本不在拦截器包中,也会显示webconsole.html

显示支柱 2 webconsole.html,因为支柱将其作为静态资源加载。请看一下DefaultStaticContentLoader

通过检查加载的webconsole.html我发现它不起作用,即使您尝试通过一些 JavaScript 更改来修复它,如果支柱不在 devMod 中,DebuggingInterceptor也不会接受来自此页面的任何数据。

@RajeevRanjan工作正常。只需添加:

<constant name="struts.action.excludePattern" value="/struts/webconsole.html"/>

如果你不想访问任何内容,你必须添加这个拦截器使用的css和js

<constant name="struts.action.excludePattern" value="/struts/webconsole.css"/>
<constant name="struts.action.excludePattern" value="/struts/webconsole.js"/>

我认为这应该/可以解决,请参阅 https://issues.apache.org/jira/browse/WW-4601。

当我们将开发模式设置为 false 时,客户端无法通过 webconsole.html 注入任何内容。顺便说一下,这个 webconsole.html 页面仍然存在,因此我们可以通过在 web 中设置安全约束来隐藏它们.xml以避免访问此文件

<security-constraint>
  <web-resource-collection>
    <web-resource-name>OGNLconsole</web-resource-name>
    <url-pattern>*/struts/webconsole.*</url-pattern>
  </web-resource-collection>
</security-constraint>

相关内容

  • 没有找到相关文章

最新更新