action name 取值为login!login.action 形式 而非login  method name 为null

解决连接

http://blog.csdn.net/achilles12345/article/details/37697457

struts2安全漏洞频发,最近把这个升级了,但是发现了一些问题;

1、以前的url不能访问了,比如“user!list.do”,其中user是配置在action中的action名称,list是action中的方法。

分析:

第一步:调试程序发现获取的ActionMapper变量中,name变成了user!list, method属性变成了null,很显然正确情况下name应该是user,method应该是list。跟进到DefaultActionMapper中时发现parseNameAndNamespace这个方法截取字符串是错误的,第一个直觉告诉我struts的开发者没有这么愚蠢,是不是后边又进行了修正了呢?

第二步:继续跟进代码发现在parseNameAndNamespace这个方法后边的parseActionName方法里又进行了一次处理,这个时候会把name属性从“!”进行分割重新获

取到name和method方法,很显然这样就对了。但是这个操作必须要根据DefaultActionMapper的成员变量allowDynamicMethodCalls属性来区别,当这个属性为true
             的时候,才能执行后边的代码。那么这个属性又是在什么时候被设置的呢?

第三步:一看DefaultActionMapper源码的构造函数,其中没有这个变量,然后我就想是不是set方法设置进来的,一看源码如下:

@Inject(StrutsConstants.STRUTS_ENABLE_DYNAMIC_METHOD_INVOCATION)
                public void setAllowDynamicMethodCalls(String allow) {

allowDynamicMethodCalls = "true".equesIgnoreCase(allow);

}

很显然是被注入进来的。

第四步:剩余的过程也是跟进,可以省略了,最终这些变量是从struts-core-2.3.16.3.jar下的default.properties里来。和旧的版本一比较,果然struts.enable.DynamicMethodInvocation在2.3.15版本里设置的是true,而在2.3.16.3里是设置为false的。

我就用“struts.enable.DynamicMethodInvocation”这个关键字上网一搜,果然是struts小组的人修改了这个属性,把默认修改为打开。然后我有上struts官网一看。唉,果然如此。看来,之前我不关心升级版本的新功能真是罪孽!导致浪费了这么多的时间,以后这方面要改进。struts官方说明的链接如下:

http://struts.apache.org/release/2.3.x/docs/version-notes-23152.html

问题清楚了解决起来就容易了,在我们项目的struts.xml配置文件中加入以下配置:
        <constant name="struts.enable.DynamicMethodInvocation" value="true"/>

2、这次引入了struts的零配置,但是发现一个问题就是这个零配置的ActionSupport或者是有execute方法才能被零配置组件识别,这是怎么回事?

经过调试发现在PackageBasedActionConfigBuilder类的buildConfiguration方法中要根据mapAllMatches来判断,如果这个属性是true则能被struts插件识别,否则就必须要继承ActionSupport,或者必须使用零配置的Action注解,否则就不会被识别。那么这个变量又是如何来的呢?经过追代码发现这个是通过当前类的setMapAllMatches方法注入的,这个变量在convention组件的sturts-plugin.xml文件中配置了,而且默认值是false。

问题清楚了,解决办法就是在struts.xml的配置文件中配置<constant name="struts.convention.action.mapallmatches" value="true"/>即可解决。

struts2升级jar包遇到无法正常访问action的方法的问题相关推荐

  1. POI3.17与POI旧版本对比,方便POI升级jar包修改

    POI3.17与POI旧版本对比,方便POI升级jar包修改 颜色定义变化 获取单元格格式 设置单元格格式 设置单元格垂直居中样式 设置边框 合并单元格 设置字体加粗 最近使用EasyExcel写导入 ...

  2. 设置Maven自动升级jar包

    通常,Maven中配置依赖使用以下形式 <dependency><groupId>org.seleniumhq.selenium</groupId><arti ...

  3. struts2各个jar包

    struts2五大核心jar包 <从下载的struts2框架中找出下面的jar包,可以从例子中找> Commons-logging.jar ----– 用于通用日志处理 (也可以用log4 ...

  4. Jar 包依赖冲突排查思路和解决方法(logback + slf4j-log4j12)

    Jar 包依赖冲突排查思路和解决方法 [TOC] 起因 喜大普奔,本期发布中,我们的应用从 jdk7 升级到 jdk8,终于可以用上新特性的语法进行代码编写,通过几轮开发.测试和验证后,在上预发环境时 ...

  5. Log4j2 日志 依赖 jar包 缺失 导致启动报错 解决方法

    Log4j2 日志 依赖 jar包 缺失 导致启动报错 解决方法. 一个Java老项目,更新了日志工具,升级为Log4j2,在引入log4j-api-2.14.0.jar 和log4j-core-2. ...

  6. strtus2改成springboot_springboot+struts2打成jar包运行

    springboot集成struts2,在开发工具(eclipse)运行正常.打成jar包或war包,使用java -jar执行,均会出现以下错误:求如何解决? java.lang.NullPoint ...

  7. hibernate+struts2整合jar包冲突

    前几天,在用Hibernate+Struts2做项目的时候遇到了一个很棘手的问题,jar包冲突!!!先亮一下错误: 之前还不知道这是个啥错误,经过上网查找之后才知道这是jar包冲突的问题!!由于项目都 ...

  8. springboot打包成jar包部署,无法访问到fastDFS配置文件【已解决】

    最近做了一个项目,包含文件上传功能,本地运行很正常,打成jar包部署到服务器上时,结果就报错了,花了几个小时的时间才发现是因为无法访问到fastDFS的配置文件dfds_client.conf,导致报 ...

  9. Jar 包依赖冲突排查思路和解决方法

    作者:jingQ https://www.sevenyuan.cn/ 起因 应用从 jdk7 升级到 jdk8,终于可以用上新特性的语法进行代码编写,通过几轮开发.测试和验证后,在上预发环境时,应用突 ...

最新文章

  1. Linux下应用软件的安装
  2. 什么是OKR?目标管理如何做?
  3. Windows下MongoDB安装及创建用户名和密码
  4. PHP 取302跳转后真实 URL 的两种方法
  5. 全球及中国生物质能利用产业现状调研及十四五建设布局规划报告2021-2027年
  6. cs231n笔记:线性分类器
  7. hanlp 词频统计_10.HanLP实现k均值--文本聚类
  8. SkyEye:航空发动机控制系统仿真
  9. 【Nacos】Nacos MySQL 配置 启动报错 ould not create connection to database server. Attempted reconnect 3 time
  10. 都是用Redis的服务器,12306为啥干不过淘宝???
  11. React-Native测试报告
  12. 虚拟化技术天书:九宫格图解虚拟化——此文多风险,阅读需谨慎
  13. 如何使用Log4net创建日志及简单扩展
  14. fatal error LNK1281: 无法生成 SAFESEH 映像
  15. 小学生作业打印推荐哪个软件?
  16. 用c语言编写天数计算器,C/C++实现日期计算器的示例代码
  17. 计算机锁屏之后QQ音乐停止播放了,win10在锁屏后怎样设置才能继续播放音乐
  18. Ubuntu 20.04 日常软件及开发环境安装命令,包括QQ、搜狗、Chrome、vlc、网易云音乐安装方法(待整理!!!)
  19. 教你一分钟实现动态模糊效果
  20. 程序员之间的各种鄙视链

热门文章

  1. c ++查找字符串_C ++结构| 查找输出程序| 套装1
  2. 计算机课伤害事故的防范,体育课安全伤害事故的防范与处理
  3. java gc的特性_Java12新特性 -- 可中断的G1 Mixed GC
  4. 更换mysql_这些被你忽视的MySQL细节,可能会让你丢饭碗!
  5. 用hundred造句子_八个有趣的开学破冰游戏,线上线下都能用
  6. sqldeveloper mysql迁移_通过SQL Developer工具将MySQL数据库内容迁移至Oracle的步骤
  7. 为什么说python是计算机语言的未来_Python这么火,为什么说它不是未来的编程语言?...
  8. fastdfs java token_fastdfs 开启 token 防盗链
  9. mcq 队列_MCQ | 软件程序分析工具和组件分类| 免费和开源软件
  10. 借助datetime和pyttsx3在Python中创建闹钟