`

【Struts开发中谨慎使用全局变量】

阅读更多
前一段时间开发的项目,由于合作方的关系,近期进行了改版并重新审查了原来写的代码进行了一些重构处理。处理后的结果就是程序性能上来了但业代来了严重的问题:访问数据的乱串也就是用户a登录系统访问a自己的数据时偶尔会出现得到的数据却是b用户的,使用系统的人数越多这样的现象越是严重,以为是session中存储的信息串了,改成了cookie的(项目公司内部使用,安全问题考虑的不用太多)还是不行,又仔细检查了sql语句,语句也是正确的,哪怎么回用户得到的信息不是自己的呢??在群里问了一下一位叫做“糖醋鼻子”的朋友给了很大帮助,在他的提示中我想到了全局变量的线程安全问题。

在用Struts 1原来的项目都是使用的局部变量而局部变量是线程安全的,我改后把一些数据提出来了做成了全局的(罪魁祸首就在此)。

分析原理:
局部变量独立创建空间,它不是共享的资源。一个应用的生命周期中, 由于Struts1的 Action 是单例模式,每个Action只有一个实例处理所有的请求。这一点可以通过execute 方法中 打印 this得到证明。这样就会出现对全局变量的安全造成威胁。

总结经验:struts1 开发中谨慎使用全局变量存放数据,不安全啊!!!

扩展:使用actionForm 怎么不出现这样的问题呢?

原因: 这个Form 是通过参数形式传给action的,不存在共享变量的问题,更重要的是每一个request产生的actionForm实例也是不同的。

struts1  和 struts2  对比一下

struts2   中每一个请求产生一个新的实例对象,即使在Action中定义了很多全局变量,也不存在线程安全问题。
在处理每一个用户请求的时候,都建立一个单独的线程进行处理,值栈ValueStack也是伴随着这个单独的线程而存在的。在该线程存在过程中,可以随意访问值栈,这就保证了值栈的安全性。

在Struts 2中,ActionContext是一个局部线程,这就意味着每个线程中的ActionContext内容都是唯一的。所以不用担ruts2中 不用害怕Action的线程安全问题。


分享到:
评论

相关推荐

    过滤器 Struts2全局变量 action转化do

    标题中的“过滤器 Struts2全局变量 action转化do”可能指的是Struts2框架中的ActionMapping和FilterDispatcher配置,以及全局结果(Global Results)的概念。 1. **过滤器(Filter)**:在Java Web开发中,过滤器是...

    Struts开发技巧Struts开发技巧

    Struts开发技巧Struts开发技巧Struts开发技巧Struts开发技巧Struts开发技巧Struts开发技巧Struts开发技巧Struts开发技巧

    struts2 OGNL表达式

    2. **Struts2动作和结果**:如何在配置文件中使用OGNL定义Action和结果。 3. **JSP标签库**:Struts2提供的JSP标签库,如`s:property`、`s:iterator`等,它们内部使用了OGNL。 4. **安全问题**:理解OGNL注入的风险...

    ECLIPSE+STRUTS开发

    本文将详细介绍如何在Eclipse中配置并使用Struts2进行开发。 #### 二、运行环境搭建 在Eclipse中配置Struts2,首先需要搭建以下运行环境: 1. **JDK6安装**:这是Java开发的基础,确保系统中已安装JDK6,且环境...

    struts2开发文档

    在压缩包中的文档可能涵盖了Struts2的安装配置、基本概念、拦截器使用、配置详解、Action和结果、插件应用、国际化、异常处理、类型转换、OGNL使用、测试等方面的内容。通过深入学习这些文档,开发者能够全面掌握...

    struts2 开发包.zip

    8. **异常处理**:Struts2提供了全局的异常处理机制,可以统一处理应用中的异常,提高代码的健壮性。 9. **国际化与本地化**:Struts2支持多语言环境,开发者可以为不同地区提供相应的语言包。 10. **测试支持**:...

    使用Struts 2框架开发租房网站

    在开发租房网站的过程中,学生将学习如何创建Action类、配置struts.xml、设计数据库模型、编写DAO和Service层代码、实现页面交互以及使用Struts 2提供的各种功能来优化用户体验。这将帮助他们掌握Web应用开发的基本...

    Struts2 开发包

    9. **异常处理**:Struts2提供了一套完整的异常处理机制,允许开发者定义全局或Action级别的异常映射,以优雅地处理程序中的错误。 10. **国际化与本地化**:Struts2支持多语言环境,开发者可以通过资源包...

    struts2开发基础包

    为了在项目中使用"struts2开发基础包",你需要将提供的JAR文件添加到项目的`lib`目录,然后配置`struts2`的Maven或Gradle依赖,确保所有必要的库都已包含在构建路径中。这样,你就可以开始编写Struts2 Action,设计...

    Struts1 和 Struts 2 国际化全局资源

    以下是如何在Struts1中设置和使用全局资源: 1. **创建资源文件**:首先,你需要为每种语言创建一个`.properties`文件,如`messages_en.properties`(英语)和`messages_fr.properties`(法语)。这些文件通常存放...

    三大框架中文文档中的struts2.0开发手册(程序员必看)

    Struts2.0是Java Web开发中非常重要的一个MVC框架,它是在原有的Struts1.x基础上进行改进和发展而来的。这个"三大框架中文文档中的struts2.0开发手册"为程序员提供了一份详尽的参考资料,帮助他们理解和掌握Struts...

    struts2开发需要用到的jar包

    struts2开发需要用到的jar包

    STRUTS ActionForm乱码,servlet全局过滤器转义编码。

    Struts框架中的ActionForm乱码问题以及Servlet全局过滤器的转义编码处理是Java Web开发中常见的字符编码问题。在开发基于Struts的Web应用时,乱码主要出现在三个方面:页面显示乱码、参数传递乱码以及国际化资源文件...

    struts2 全局结果集

    开发过程中,IDE插件如IDEA的Struts2插件,可以帮助快速配置和检查Struts2的配置文件,提高开发效率。 通过理解和应用全局结果集,开发者能够更好地组织和管理Struts2应用程序的流程控制,减少重复代码,提高代码...

    Struts2开发jar包

    - **全局配置**:在`struts.xml`中可以进行全局配置,比如全局结果类型、拦截器栈、常量等。 - **Action配置**:定义Action的配置,包括Action的类、方法、结果页面等。 - **OGNL表达式**:Struts2使用OGNL...

    Struts2.0视频教程+struts2.0中文教程

    1. **OGNL(Object-Graph Navigation Language)**:介绍Struts2中使用的表达式语言,用于在Action和视图之间传递数据。 2. **Action与Result**:详细阐述Action类的设计和编写,以及如何定义Result来控制流程跳转...

    使用myEclipse进行struts开发

    本教程将详细介绍如何在MyEclipse中进行Struts开发。 1. **安装与配置MyEclipse** 在使用MyEclipse进行Struts开发之前,首先需要确保已经安装了MyEclipse。下载并安装最新版本的MyEclipse,然后进行必要的配置,...

    struts1 开发包

    8. **异常处理**:通过定义全局异常处理,Struts1能够统一处理应用程序中的错误和异常,提供友好的用户反馈。 了解并熟练掌握这些知识点,你就能有效地使用Struts1开发Java Web应用。虽然Struts1现在已经被Struts2...

Global site tag (gtag.js) - Google Analytics