升级struts2-2.5,其实并没有想象中的那么难

最近公司在阿里的服务器总是受到DDOS攻击,和老大一起查看了攻击详情发现是由于struts版本过低,导致被入侵,于是升级了一下struts的版本到2.5,希望可以一次性解决这个问题


首先,替换jar包(注意:并不是图片里有的都要放到自己的项目中,自己的项目中用到了哪些,就替换掉哪些,要注意的是:如果你的项目中没有用到log4j.xml在换成2.5以后,运行tomcat启动项目,总是会提示你项目中缺少log4j.xml,这个问题自己建立一个log4j.xml放在src下,配一些最基本的东西就可以了,如果原来的项目是log4j.jar要保留,把log4j-api-2.8.2.jar也是要拷贝进去不然的话,在删除log4j.jar之后会报错,tomcat启动不起来

然后删除自己项目中的xwork-core-2.3.20.jar,因为这个类库在struts升级到2.5版本已经包含在了struts2-core中了,所以一定要删除


之后要在自己的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>

修改之后,需要前往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

在项目里有jsp的小伙伴们,如果你们用了s标签,请修改一下几点

<s:setname="myCode" value=" *** "/>

改成

<s:setvar="myCode" value=" *** "/>

-------------------------------------------------------------------------------------------------------------------------------------

<s:propertyescape="true" var="someProperty"/>

改成

<s:propertyescapeHtml="true" var="someProperty"/>


还有就是

由于新版本的Struts默认不能修改action的访问后缀,不能使用通配的方式调用action里的方法,所以添加:

<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>

另外也是最重要的: struts2.5版本适用jdk1.7或者以上


<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <constant name="struts.devMode" value="true" /> <package name="default" namespace="/" extends="struts-default"> <action name="helloworld" class="com.mytest.HelloWorldAction"> <result> /result.jsp </result> </action> </package> <package name="LoginForm" extends="struts-default"> <action name="login" class="com.mytest.LoginAction" method="execute"> <result> /login.jsp </result> </action> </package> </struts> <!--1.使用 struts2.5.16 版本 2.lib 文件夹下放置:工程所需jar包 3.xml标签库为远程获取,路径:http://struts.apache.org/dtds/struts-2.5.dtd 可设置为本地【xml输入语法快捷提示】,就不用远程获取了:window-->preference-->输入Catalog-->xml下的Catalog-->Add-->location:解压缩struts-core-2.5.16.jar 后,文件struts-2.5.dtd文件路径。 4.设置开发者模式: <constant name="struts.devMode" value="true" /> <constant name="struts.i18n.encoding" value="utf-8" /> 每次HTTP请求系统都重新加载资源文件,有助于开发 5.struts配置文件改动后,是否重新加载 <constant name="struts.configuration.xml.reload" value="true" /> 6.查看源码:Build path 后的类库,奶瓶图标找到struts-core-2.5.16.jar 右键-->properties-->java Source Attachment-->External location :源码路径 7.查看文档API:Build path 后的类库,奶瓶图标找到struts-core-2.5.16.jar 右键-->properties-->javadoc location :输入网址 或选择源码DOC目录 8.拦截器:web.xml 配置拦截器<filter> struts2.5的filter-class 与struts2.5以前版本有所不同 <!-- 浏览器访问 http://localhost:8080/MyWeb/helloworld --> --> <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>Struts 2</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!-- 配置核心拦截器 --> <filter> <filter-name>struts2</filter-name> <!-- Filter的实现类 struts2.5 --> <filter-class> org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter </filter-class> </filter> <filter-mapping> <!-- 拦截所有的url --> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值