Struts 2.3 Upgrading Issue
版本升级原因:struts2.0漏洞
http://struts.apache.org/download.cgi#struts221
http://struts.apache.org/release/2.3.x/docs/s2-014.html
升级方法和问题:
https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=30743764
http://bbs.csdn.net/topics/390598510
http://stackoverflow.com/questions/11543959/struts-2-3-upgrading-ognl-issue
Step 1 - 更新Struts 2的jar文件到Class Path
【Struts2.0的jar依赖包】
asm.jar
commons-fileupload-1.2.1.jar
commons-io-1.3.2.jar
freemarker-2.3.8.jar
ognl-2.6.11.jar
struts2-core-2.0.14.jar
xwork-2.0.7.jar
commons-lang-2.5.jar(保留)
【Struts2.3的jar依赖包】
工具:maven、jar_search等
我们添加Struts 2最小需求的jar包。我们将把这些jar包拷贝到WEB-INF\lib这个文件夹中。
找到并拷贝这些文件
asm-3.3.jar
asm-commons-3.3.jar
asm-tree-3.3.jar
commons-fileupload-1.3.1.jar
commons-io-2.2.jar
commons-lang3-3.1.jar
freemarker-2.3.19.jar
ognl-3.0.6.jar
struts2-core-2.3.16.3.jar
xwork-core-2.3.16.3.jar
Step 2 - 更新Struts 2 Servlet Filter
【truts2.0的servlet过滤器】
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
<url-pattern>*.jsp</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
【struts2.3的servlet过滤器】
为了要Struts 2 框架在你的web应用中工作,你需要在web.xml文件中添加Servlet Filter类和Filter mappingr。下面是你要添加的内容。
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Step 3 - 创建struts.xml文件
【打开DMI】
2.3+默认DMI是关闭的,动态方法调用官方推荐的做法是,使用通配符的形式,因可能存在安全隐患:
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
否则总是跳转到default action execute中或报错:TTP Status 404 - There is no Action mapped for namespace [/] and action name [login!login.action] associated with context path [/]
Step 4 - 关闭开发模式
struts.xml :
<constant name="struts.devMode" value="false" />
否则表单提交时action中没有bean的set方法就会报错如:
http://localhost/login!login.action?test=2
Error setting expression 'test' with value ['2', ]
或者给每个提交的properties在action中添加bean和get/set方法。
Step 5 - 提高log4j级别
log4j.properties :
#The problem is that the page including the inventory search has several other fields
#which are not related to the inventory search (and do not have a getter/settter
#in the inventorySearch action). Under Struts 2.0, these extra fields are ignored
#by the inventorySearch action. However, Struts 2.3 throws the above exception
#when these extra fields are posted with the form.
log4j.logger.com.opensymphony.xwork2=ERROR
否则报类似错误:
[STDOUT] WARN [com.opensymphony.xwork2.ognl.OgnlValueStack] - CommonsLogger.warn(60) | Error setting expression 'nonInventoryRelatedField' with value '[Ljava.lang.String;@833d35'
ognl.OgnlException: target is null for setProperty(null, "9", [Ljava.lang.String;@833d35)
Step 6 - Spring代理调度job时I18N资源文件无法取到值
系统管理>任务管理 通过页面按钮action手动启动调度job是可以取到资源文件的内容的,可以正常跑该任务。
但spring代理调度该job时无法取得properties的资源文件,struts2.3出现此问题,struts2.0的版本没问题。
BagProcessJob.java L55
String job_cd = this.baseAction.getRes("job.cd.bag") ;
BaseAction.java:524
return ResourceBundle.getBundle(APP, this.getLocale()).getString(key);
Locale com.opensymphony.xwork2.ActionSupport.getLocale() = null
解决方案:
/**
* 重写方法:取得I18N国际化资源文件用Locale对象。
* 【原因】通过页面按钮action手动启动调度job是可以取到资源文件的内容的,可以正常跑该任务。
* 但spring代理调度该job时无法取得properties的资源文件,struts2.3出现此问题,struts2.0的版本没问题。
* com.opensymphony.xwork2.ActionSupport.getLocale() = null
* 【方式】手动创建中文 Locale,Action上下文生效时替换真实browser的locale
*
* add by jeffen@pactera at 20140718
* @return
*/
public Locale getLocale(){
Locale l = new Locale("zh_CN", "CN");
ActionContext ctx = ActionContext.getContext();
if (ctx != null && ctx.getLocale() != null) {
l = ctx.getLocale();
}
return l;
}
Step 7 - s:debug标签无效需要Jetty容器支持
Struts2.3.16 s:debug新特性:<s:debug/> tag was improved and now works properly under Jetty, see WW-4223
http://www.kankanews.com/ICkengine/archives/89289.shtml
否则报错,org.apache.jasper.JasperException: An exception occurred processing JSP
ognl/ObjectPropertyAccessor.java
ognl.NoSuchPropertyException:
分享到:
相关推荐
升级过程主要分为两个部分:Ambari 的升级和 HDP 的升级。 首先,我们需要遵循官方文档进行操作。Ambari 的升级指南可以在 Hortonworks 的官方网站上找到,例如在 `Ambari-2.6.0.0/bk_ambari-upgrade/content/...
DINPUT8.DLL是一个DirectInput库文件,用于处理游戏控制器和其他输入设备的输入,可能在升级过程中用到,以确保设备的兼容性和响应性。 ProBatch.dll和FirmWareFile.dll是核心组件,可能负责固件文件的处理和升级...
4. **多阶段升级法**:大型复杂环境可能需要多阶段升级,先升级到一个过渡版本(如10.2到11.1),然后再升级到11.2。这种方法适合需要逐步测试和验证新功能的情况。 5. **数据库链接升级法**:对于需要保持旧版本...
升级到DB2 9.7版对于企业来说意味着获得更强大的性能、增强的安全性、优化的管理工具以及对最新技术的支持。这不仅能够提升数据库的运行效率,降低维护成本,还能帮助企业更好地适应不断变化的业务需求和技术环境。 ...
因此,开发者在升级到PHP 7时,应检查和修改这些即将过时的代码部分,避免未来出现兼容性问题。 总而言之,《升级到PHP 7》为开发者提供了深入理解和实践PHP最新版本的必要知识,帮助他们更新自己的开发实践,并...
标题:“Upgrading Oracle Applications”(升级Oracle应用程序)强调了文档的主要内容,即指导用户如何将Oracle应用程序从早期版本升级到Release 11i(11.5.10)。 描述:“Upgrading Oracle Applications”与标题...
总之,Oracle数据库升级到11.1版本是一个涉及多个步骤和策略的过程。理解并选择合适的升级方法是确保平稳过渡和最小化业务中断的关键。通过深入研究和准备,可以确保顺利地利用Oracle 11.1的新特性,提升系统的稳定...
在升级过程中遇到问题时,用户应按照手册提供的指导进行操作。 10. **文档需求**:升级过程中,用户可能需要参考多份文档,如操作手册、技术规范、快速参考指南等,以确保每个步骤都按照正确的顺序和方法执行。 ...
标题所指的"best-practices-for-upgrading-11gr2"即为关于升级到Oracle Database 11g Release 2的最佳实践。描述中提到官方升级最佳实践,列出了在进行升级时应当遵循的一些重要做法。标签"upgrade 11g"直接指明了这...
Upgrading and Repairing Servers Pages: 1128
### DB2升级指南:DB2Upgrading-db2upgk970 #### 概述 本文档旨在为用户介绍如何将IBM DB2数据库系统从早期版本升级到DB2 9.7版本的过程。这份指南涵盖了Linux、UNIX及Windows平台上DB2 9.7版本的安装与升级流程,...
官方资料:[英文]白皮书:Upgrading to Oracle Database 12c (12.1.0.2)升级到ORACLE12c (12.1.0.2) Comparing Upgrade and Migration;Database Upgrade;Database Migration.;Multitenant Architecture;...
3. **安全审计**:复查网络的安全策略,确保升级未引入任何潜在的安全漏洞。 #### 小结 将自主型Cisco Aironet接入点升级为轻量级模式是一项复杂但至关重要的任务,旨在优化网络管理、提高安全性并增强网络的可...
### Oracle 11g 通过 DBUA 升级至 19C 详细步骤 #### 一、前言 随着技术的发展与迭代,Oracle 为了确保用户能够享受到最新的功能及安全增强特性,会定期推出新的数据库版本,并逐渐淘汰旧版本。Oracle 11g 已经...
综上所述,从FreeRTOS升级到SafeRTOS涉及到多个方面的改变,这些改变旨在提高系统的安全性、稳定性和可靠性。通过这些改进,SafeRTOS成为了一个更适合于需要高可靠性和安全性的应用领域的实时操作系统。
我们将深入探讨如何将现有的Oracle Solaris 11 11/11系统升级到Oracle Solaris 11.1-9版本,这个过程主要通过Image Packaging System (IPS)来实现,IPS是Oracle Solaris操作系统中的一个关键组件,负责软件包的安装...
需要注意的是,升级过程中可能会遇到各种未预料的问题,因此在整个过程中都需要仔细检查和验证每个步骤的结果。同时,及时参考官方文档和社区支持以解决遇到的问题是非常重要的。完成升级后,还需要进行一系列的验证...
### V7000微码升级实施教程 #### 一、引言 V7000作为IBM的一款高性能存储解决方案,在数据中心中扮演着至关重要的角色。为了确保其稳定性和兼容性,定期进行微码(固件)升级是必要的。本文档将详细介绍V7000微码...