最近,我需要将Struts2库从2.3.15.1升级到2.3.16.2。
首先,我升级了这些库:
- commons-fileupload-1.3.1.jar
- commons-io-2.2.jar
- 支柱2-核心-2.3.16.2.jar
- 支柱2-单元-插头2.3.16.2.jar
- 支柱2—螺栓—2.3.16.2.jar
- xwork-core-2.3.16.2.jar
在那之后,我尝试登录该网站,但没有成功。而且我无法从Tomcat控制台获得任何错误消息或日志。
以下是我的配置文件的一些部分:
web.xml
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--Tiles-->
<listener>
<listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class>
</listener>
<servlet>
<servlet-name>tiles</servlet-name>
<servlet-class>org.apache.tiles.web.startup.TilesServlet</servlet-class>
<init-param>
<param-name>definitions-config</param-name>
<param-value>/WEB-INF/tiles.xml</param-value>
</init-param>
</servlet>
struts.xml
<struts>
<constant name="struts.custom.i18n.resources" value="ApplicationResources,errors"/>
<constant name="struts.devMode" value="true" />
<constant name="struts.configuration.xml.reload" value="true" />
<constant name="struts.action.extension" value="do" />
<package name="tiles" extends="tiles-default" namespace="/test">
<result-types>
<result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult"/>
</result-types>
<default-interceptor-ref name="myStack"/>
<global-results>
<result name="input">/error.jsp</result>
<result name="success" type="tiles">global.setting.successMessage</result>
<result name="error" type="tiles">global.setting.errorMessage</result>
<result name="index" type="tiles">global.home.index</result>
</global-results>
<action name="Login" class="test.action.LoginAction">
<result name="index">/index.jsp</result>
</action>
</package>
<struts>
login.jsp
<s:form action="Login.do">
<s:textfield required="true" key="user.account" />
<s:password required="true" key="user.password" />
<s:submit key="normal.login" align="right" method="login"/>
</s:form>
我关闭了web.xml
中的其他筛选器和struts.xml
中的拦截器。
最后,我无法登录网站,也没有从Tomcat控制台收到任何错误消息或日志。
如果没有从Tomcat控制台收到任何错误消息或日志,则应尝试调试应用程序以查找问题。你应该做的第一件事是打开开发者模式:struts.devMode=true
,然后你会在控制台上看到更多的消息。
更接近您的问题:作为网站上发布的一个安全问题,DMI(动态方法调用(已按默认配置设置关闭。但是,您可以更改此设置以允许params
拦截器接受method:
参数。或者,您应该重构应用程序,使其仅使用映射的方法。例如
<action name="Login" class="test.action.LoginAction" method="login">
<result name="index">/index.jsp</result>
</action>