Struts2由2.3.16.3升级为2.5.20引发的问题及解决办法

 

 

近期,项目在阿里云平台部署后,发现有struts2存在安全漏洞。公司使用的struts2版本为2.3.16.3,于是决定升级到2.5.20以解决这个问题。

在升级到2.5.20之后,产生了一系列的问题,在查阅各种资料之后,问题得以一一解决,现在把遇到的问题及解决方法总结一下,方便以后查阅。

项目是用maven构建,struts2升级到2.5.20需要替换的pom依赖

新依赖:


    org.apache.struts
    struts2-core
    2.5.20
 



    org.apache.struts

    struts2-spring-plugin

    2.5.20





    org.apache.struts

    struts2-json-plugin

    2.5.20





    org.apache.struts

    struts2-convention-plugin

    2.5.20





    org.apache.struts

    struts2-config-browser-plugin

    2.5.20





    com.jgeppert.struts2.jquery

    struts2-jquery-plugin

    3.7.1





    com.jgeppert.struts2.jquery

    struts2-jquery-grid-plugin

    3.7.1





    org.apache.struts

    struts2-dojo-plugin

    2.3.37

    

        

            org.apache.struts

            struts2-core

        

    


 
            cglib
            cglib
            3.2.5

旧的依赖(需要被替换掉的):

         org.apache.struts
         struts2-core
         2.3.16.3
         
         
           javassist
           javassist
         
  


         org.apache.struts
         struts2-spring-plugin
         2.3.16.3


         org.apache.struts
         struts2-json-plugin
         2.3.16.3


         org.apache.struts
         struts2-convention-plugin
         2.3.16.3


         org.apache.struts
         struts2-config-browser-plugin
         2.3.16.3


         com.jgeppert.struts2.jquery
         struts2-jquery-plugin
         3.7.1


         com.jgeppert.struts2.jquery
         struts2-jquery-grid-plugin
         3.7.1


         org.apache.struts
         struts2-dojo-plugin
         2.3.16.3


         asm
         asm
         3.3.1

 
            cglib
            cglib
            2.2.2
 
                

其他的依赖jar是通过传递依赖方式导入进来的,比如asm,asm版本需要升级到5.2,在这里通过传递依赖导入的。接下来就是开始解决各种问题了。

问题1.java.lang.ClassNotFoundException:org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuterFilter

原因:struts2升级到2.5之后,StrutsPrepareAndExecuterFilter被移到了org.apache.struts2.dispatcher.filter包下面。

解决办法:

修改web.xml的配置:

旧配置:



         struts2

         org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter





         struts2

         /*

将上面的配置修改成下面的配置,

新配置:        

 

                   struts2

                   org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter

         

         

                   struts2

                   /*

         

问题2. Attribute escape invalid for tag property according to TLD异常错误

原因:struts2.5将property标签的escape属性删除了,新增了escapeJavaScript
,escapeCsv,escapeXml,escapeHtml。
解决方法:
使用escapeJavaScript,escapeCsv,escapeXml,escapeHtml代替escape属性。
问题3:Attribute [id] invalid for tag [iterator] according to TLD
原因:struts2.5将iterator标签的id属性取消了,使用var来代替。
解决方法:
iterator表达式中的id换成var即可。
问题4: java.lang.ClassNotFoundException:com.opensymphony.xwork2.ValidationAware
原因:ValidationAware类被移到com.opensymphony.xwork2.interceptor包下。
解决方法:
com.opensymphony.xwork2.ValidationAware类改成com.opensymphony.xwork2.interceptor.ValidationAware。
问题5:
java.lang.IncompatibleClassChangeError: class org.apache.struts2.convention.DefaultClassFinder$InfoBuildingVisitor has interface org.objectweb.asm.ClassVisitor as super class
原因:asm3.3.1中org.objectweb.asm.ClassVisitor是一个接口,asm5.2中org.objectweb.asm.ClassVisitor是一个抽象类,最初的时候忘记升级asm版本了。
解决办法:asm升级到5.2即可解决问题。

你可能感兴趣的:(java,sturts2,漏洞,struts2升级)