关于struts2升级至2.5.30后访问时出现404错误

        今天对一个老项目的struts2升级到2.5.30版本,以应对之前爆出的远程执行漏洞,看了一下网上的教程,大多都比较详细,感觉也不是很难,想着半个小时应该就可以搞定来着,结果搞了一整天才调试成功,特写此文章记录一下,供众人参考。

        下载和改配置都没什么问题,按照百度上其他人的操作基本都可以搞定,我的问题没有出现在struts.xml上,而是出现在了web.xml中。

        按照网上说的将过滤器包路径修改为

org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter

之后,无论怎么访问,都是404错误。但是过滤器确实是生效了,一方面没有报任何错误,另外直接访问过滤器根时会返回空页面而非404,只是访问具体的action时会报404。尝试修改了几个struts.xml里的配置无果后,我决定新建一个项目,排除所有的干扰,看项目能否跑起来。于是就在网上搜索了个新版本的部署教程,重新搭了一个项目,跑成功了。由于我一直以为是struts.xml的问题,所以我按照原来的配置文件一点一点添加配置并测试,结果整个配置文件的配置都复制过来了,还是可以正常访问,这时才反应过来,可能是web.xml的问题。对比新老项目后发现,原来的过滤器配置为(版本2.0.8):

<filter>
	<filter-name>struts2</filter-name>
	<filter-class>
		org.apache.struts2.dispatcher.FilterDispatcher
	</filter-class>	
</filter>
	
<filter-mapping>
	<filter-name>struts2</filter-name>
	<url-pattern>/struts/*</url-pattern>	
</filter-mapping>

而新项目的过滤器并不是像网上那样直接修改包路径,而是:

<filter>
    <filter-name>struts-prepare</filter-name>
    <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareFilter</filter-class>
</filter>
 
<filter>
     <filter-name>struts-execute</filter-name>
     <filter-class>org.apache.struts2.dispatcher.filter.StrutsExecuteFilter</filter-class>
</filter>
<filter-mapping>
     <filter-name>struts-prepare</filter-name>
     <url-pattern>/struts/*</url-pattern>
</filter-mapping>
 
<filter-mapping>
     <filter-name>struts-execute</filter-name>
     <url-pattern>/struts/*</url-pattern>
</filter-mapping>

至此,升级成功,一个小小的问题成功耽误了一天时间。当然也给我留下了一个问题:为什么使用StrutsPrepareAndExecuteFilter不能正确访问action,分开为StrutsPrepareFilter和StrutsExecuteFilter之后就可以了呢?项目的web.xml中只定义了几个listener和servlet,并没有其他的过滤器,这个问题暂时还不太清楚,后续有时间了会继续研究,也欢迎知道这其中原由的大佬指点迷津!

PS:不要再问为什么还用struts2框架了,因为是老项目,比较久远了,最近慢慢开始注重网络安全才想起来把这些老项目也升一下级,仅此而已!

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nwsxdxqs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值