问题修复记录|问题解决(struts版本升级为2.5.22,struts某些action扫描不进,调用action报404错)
文章目录
- 问题场景
- 问题环境
- 问题原因
- 一、配置是否存在问题
- 二、代码扫描action的时候,存在问题
- 解决方案
- 总结
- 参考链接
- 随缘求赞
问题场景 因为struts报了漏洞,项目必须升级到
struts2.5.22
。该项目是比较老旧的项目,技术是传统的SSH3
框架,即spring+struts2+Hibernate
。所以升级过程算是比较繁琐,而且问题也比较多。其中遇到一种情况,Struts-Convention-Plugin
插件是使用配置文件进行struts2 Action
的加载,减少人为工作。其中,使用了Struts-Convention-Plugin
插件的struts.convention.action.includeJars
参数,自动扫描JAR
包里面的action
,自动加载。这里的发生的问题便是:大多数的JAR
包内部的action
都是正常被加载进去的,但是有一个公司公共框架的action
没有被加载进去。表现形式就是调用该公告框架的action,提示404 NOT FOUND。本文就是针对这种情况进行解决的。问题环境
软件 | 版本 |
---|---|
struts | 2.3 ——》 2.5.22 |
struts2-convention-plugin | 2.5.22 |
jar
的action
是没有被扫描进去的。而大多数的jar
包的action
是可以被扫描进去的。那么,我们可以从几个方面进行问题解决:一、配置是否存在问题 下面是struts.xml里面关于
struts.convention.action.includeJars
参数的配置:
熟悉正则表达式的朋友,应该可以知道该参数值的含义就是扫描所有的
jar
文件。而公共框架的lib
包命名符合该正则表达式的值。所以这里的配置应该是没有问题的。二、代码扫描action的时候,存在问题 既然配置没问题,那么就应该是
Struts-Convention-Plugin
插件在扫描jar
包的时候,出现了遗漏。这样就得研究源码了。研究源码的过程比较枯燥,这里就直接贴结果了:文章图片
由上图可以知道,过滤出来的
jar
,还需要从中获取jar
包中存在META-INF
目录的jar
包文件,否则就会被过滤掉。如果jar
包不存在该目录,或者META-INF
目录存在问题,就会导致该jar
包被过滤掉,进而导致该jar
包的action
没有被注册进去。所以需要检查jar
包里面的配置。解决方案 博主这边的jar包是存在
META-INF
目录,但是却是一个存在问题的目录。所以我将可以扫描出action
的jar
包里面的META-INF
目录拿了出来,并进行替换。然后重新放到项目lib
目录。等项目跑起来之后,是可以正常进行访问。故此,问题得到解决。总结 虽然篇幅不长,但是这个问题的解决还是花费了几个小时进行研究。这次这个问题告诉我们,打包的时候要打包正常,本次问题的
lib
包是项目很久的包,属于2017年的。估计是当时打包存在问题,导致META-INF
目录出现问题。参考链接 ConventionPlugin-Actionsinjarfiles
随缘求赞 【问题修复记录|问题解决(struts版本升级为2.5.22,struts某些action扫描不进,调用action报404错)】如果我的文章对大家产生了帮忙,可以在文章底部点个赞或者收藏;
如果有好的讨论,可以留言;
如果想继续查看我以后的文章,可以点击关注
可以扫描以下二维码,关注我的公众号:枫夜之求索阁,查看我最新的分享!
文章图片
文章图片
推荐阅读
- parallels|parallels desktop 解决网络初始化失败问题
- 20170612时间和注意力开销记录
- jhipster|jhipster 升级无效问题
- 七老修复好敏感、角质层薄、红血丝
- “精神病患者”的角度问题
- 解决SpringBoot引用别的模块无法注入的问题
- Hive常见问题汇总
- 姚老师互动问答会|姚老师互动问答会 # 问题001(如何更有智慧的和身边人分享金刚智慧())
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- 【教育故事】|【教育故事】 一个“问题学生”的蜕变