struts2升级jar包遇到无法正常访问action的方法的问题
来源:互联网 发布:网络转接器怎么用 编辑:程序博客网 时间:2024/05/22 00:10
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的方法的问题
- struts2.3.16.3升级遇到无法动态访问action的方法的问题。
- struts2.3.16.3升级遇到无法动态访问action的方法的问题。
- Struts2报出安全漏洞,升级jar后遇到的上传问题。
- 【开发过程问题汇总系列】【B/S struts2】加好jar包且配置好struts.xml后action还是无法请求的问题
- 解决Jackson的jar包导入,程序无法正常运行问题
- 工程jar包升级的问题
- struts2如何访问action的特定方法
- Struts2—Action方法的访问
- struts2的Action方法无法进去
- Eclipse中ADT升级JAR包所遇到的问题(java.lang.NoClassDefFoundError: 异常)
- 打jar包遇到的问题
- 采用共享jar包部署struts2+spring集成项目会遇到的问题
- struts2开发javaWeb 项目时遇到jar包冲突问题的解决办法
- iOS8 下企业版App无法正常升级的问题
- struts2.0升级到struts2.1.6遇到的问题汇总
- 遇到项目无法清除 surefirebooter的jar包的解决方案
- struts2 动态访问Action方法NoSuchMethodException问题
- 9/15ipa打包流程
- 图片加载Fresco
- 整个网络可能最完善的 Android 自定义键盘 问题汇总以及解决方案
- angular 自定义指令参数详解
- 执行力,到底是什么鬼?
- struts2升级jar包遇到无法正常访问action的方法的问题
- log4net发布之后无法写入日志原因汇总
- Spring 3 MVC ContentNegotiatingViewResolver example
- 如何把ppt转成pdf格式实现方法
- Linux之cron任务
- Mac OS X 下搭建Robot Framework+Appium环境
- 矩阵分解之奇异值分解
- python3.X爬虫-图片获取
- javaweb学习笔记