我在struts.xml
中设置了以下配置参数:
<constant name="struts.devMode" value="false" />
<constant name="struts.configuration.xml.reload" value="true" />
<constant name="struts.i18n.reload" value="false" />
在struts.properties
:struts.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>