参照以下文档,如有需要请联系qq:906001745
最近公司在阿里的服务器总是受到DDOS攻击,详情发现是由于struts版本过低,导致被入侵,于是升级了一下struts的版本到2.5,希望可以一次性解决这个问题
jar包放在百度云上自行下载:链接: https://pan.baidu.com/share/init?surl=NGfwEY_PomZC2wG5UOudlw
提取码:m3n6
(1)首先,替换jar包(注意:并不是图片里有的都要放到自己的项目中,自己的项目中用到了哪些,就替换掉哪些,要注意的是:如果你的项目中没有用到log4j.xml在换成2.5以后,运行tomcat启动项目,总是会提示你项目中缺少log4j.xml,这个问题自己建立一个log4j.xml放在src下,配一些最基本的东西就可以了。如果原来的项目是log4j.jar要保留,把log4j-api-2.8.2.jar(特别提示,这个版本不能太高,到自己打的包的lib目录下检查!!!否则会报错at com.bea.objectweb.asm.ClassReader)拷贝进去,不然的话,在删除log4j.jar之后会报错,tomcat启动不起来)
(2)然后删除自己项目中的xwork-core-2.3.20.jar,因为这个类库在struts升级到2.5版本已经包含在了struts2-core中了,所以一定要删除
(3)之后要在自己的web.xml中修改下面代码
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
把 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 中的.ng 去掉 修改为
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
(4)修改之后,需要前往struts.xml中 把原先的头部信息修改为
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd">
其实也就是把版本换成2.5
(5)在项目里有jsp的小伙伴们,如果你们用了s标签,请修改一下几点
<s:setname="myCode" value=" *** "/>
改成
<s:setvar="myCode" value=" *** "/>
-------------------------------------------------------------------------------------------------------------------------------------
<s:propertyescape="true" var="someProperty"/>
改成
<s:propertyescapeHtml="true" var="someProperty"/>
(6)还有就是
由于新版本的Struts默认不能修改action的访问后缀,不能使用通配的方式调用action里的方法,
所以添加:
package后面加一个strict-method-invocation="false"
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
<constant name="struts.enable.SlashesInActionNames" value="true"/>
使得<constant name="struts.action.extension" value="do" />可以生效
如原版本的struts的版本小于等于2.3,且项目进行动态方法配置,则可在全局中添加
<global-allowed-methods>regex:.*</global-allowed-methods>
(7)另外也是最重要的: struts2.5版本适用jdk1.7或者以上
(8)您可能遇到的错误:
(1)Caused By: java.lang.IllegalArgumentException
at com.bea.objectweb.asm.ClassReader.<init>(Unknown Source)
at com.bea.objectweb.asm.ClassReader.<init>(Unknown Source)
参考文章:http://www.mamicode.com/info-detail-2306642.html