`

(转)struts2.3.16升级问题

 
阅读更多
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.3.16升级到struts2.5.13

    从Struts2.3.16升级到Struts2.5.13是一个重要的步骤,因为这涉及到安全性改进、性能优化以及新特性的引入。以下是升级过程中涉及的关键知识点: 1. **安全更新**:Struts2.5系列引入了大量安全修复,包括针对已知...

    struts2.3.16-I

    Struts2.3.16可能会包含新的插件或者对旧插件的升级。 6. **依赖库(lib)**:压缩包中的"lib"目录包含了Struts2运行所需的第三方库,如Apache Commons库、Servlet API等。这些库为Struts2提供了必要的功能支持,...

    Struts2.3.16的必须的9个jar包

    Struts2.3.16的必须的9个jar包 Struts2在eclipse中的详细配置(图文解析):http://www.cnblogs.com/MartinLi841538513/articles/3597182.html

    Struts2.3.16最小依赖包

    Struts2是一款基于MVC(Model-View-Controller)设计...总的来说,Struts2.3.16最小依赖包为开发者提供了一个轻量级的起点,帮助他们快速地开始基于Struts2的Web应用开发,但同时也需要注意版本的兼容性和安全性问题。

    struts-2.3.16-all

    这个漏洞存在于所有Struts 2版本低于2.3.14的系统中,因此,对于使用这些早期版本的用户来说,升级到2.3.16变得至关重要,以防止可能的安全威胁。 Struts 2框架的核心组件包括: 1. **Action**:这是业务逻辑处理...

    Struts2.3.15.1版本升级到2.3.32详细流程

    为了解决上述安全问题,最有效的方式是升级Struts版本至最新发布的安全版本。以下是升级到Struts2.3.32版本的详细步骤: 1. **替换JAR包**: - **旧版本**: - freemarker-2.3.19.jar - ognl-3.0.6.jar - ...

    struts2.3.16+spring4.05+hibernate4.3.6环境搭建

    Struts2.3.16是该框架的一个稳定版本,改进了之前版本的一些问题,提供了更多的特性与插件支持,例如拦截器、结果类型和国际化等。 接下来是Spring框架,Spring4.05版本在依赖注入、AOP(面向切面编程)和事务管理...

    struts2.3.16 + hibernare4.3.4 + spring4.0.2整合jar包

    Struts2.3.16版本在前一版本的基础上进行了优化和bug修复,增强了框架的安全性和稳定性。它支持多种视图技术,如JSP、FreeMarker和Velocity,同时提供强大的表单验证和国际化功能。 Hibernate4作为对象关系映射...

    struts2安全漏洞-升级struts2 jar文件从2.2.3至2.3.16

    - **社区支持**:参与Struts2的论坛和社区,获取关于升级问题的帮助和建议。 - **自动化工具**:使用自动化工具(如OWASP Dependency Check)检查项目的依赖项,以识别已知的漏洞。 总之,升级Struts2是为了增强...

    struts2 框架的核心jar包(struts-2.3.16版本)

    具体到struts-2.3.16版本,这是Struts2的一个稳定版本,包含了多个组件和修复的bug,旨在提供更高效、更安全的开发环境。 核心jar包是Struts2框架的基础,主要包括以下几个关键组件: 1. **struts2-core.jar**:这...

    最新版本的Struts2+Spring4+Hibernate4框架整合

    项目原型:Struts2.3.16 + Spring4.1.1 + Hibernate4.3.6 二、 项目目的: 整合使用最新版本的三大框架(即Struts2、Spring4和Hibernate4),搭建项目架构原型。 项目架构原型:Struts2.3.16 + Spring4.1.1 + ...

    strust2 漏洞升级包

    总之,Struts2漏洞升级包是为了帮助用户应对Java Struts2框架中的安全问题,通过升级到包含安全补丁的新版本,避免遭受恶意攻击。在使用过程中,务必遵循正确的升级步骤,并结合安全测试和日志监控,以确保Web应用的...

    Struts2集成json2.3.16架包.绝对不会出错.

    本人一直用这架包开发. 绝对不会出错.适用于集成struts2开发.

    ssh(struts2.2.1+_hibernate3.6+spring3.0.5)整合配置

    - freemarker-2.3.16.jar - struts2-core-2.2.1.jar - struts2-spring-plugin-2.2.1.jar 配置完成后,你需要在Spring配置文件中声明Hibernate SessionFactory,并在Struts2配置文件中定义Action类。同时,别忘了在...

    SSH整合包详解.Struts2.2.3+Spring3.1.0.M2+Hibernate3.6.6

    此外,它依赖于OGNL(Object-Graph Navigation Language)进行表达式语言处理,`ognl-3.0.1.jar`用于字段类型转化等功能,`freemarker-2.3.16.jar`则作为模板技术,处理视图展示。 2. Spring:Spring主要负责业务...

Global site tag (gtag.js) - Google Analytics