struts2出现的原因:struts1的缺陷
1.支持的表现层技术单一
Struts1只支持JSP作为表现层技术,不提供与其他表现层技术,例如Velocity、freemarker等技术的整合。这一点严重约束了Struts1框架的使用,对于目前的很多JavaEE应用而言,并不一定使用JSP作为表现层技术。
虽然Struts1处理完用户请求后,并没有直接转到特定的视图资源,而是返回一个ActionForward对象(ActionForwad理解为一个逻辑视图名),在struts-config.xml文件中定义了逻辑视图名和视图资源之间的对应关系,当ActionServlet得到处理器返回的ActionForward对象后,可以根据逻辑视图名和视图资源之间的对应关系,将视图资源呈现给用户。
从设计层面上来看,不得不佩服Struts1的设计者高度解耦的设计:控制器并没有直接执行转发请求,而仅仅返回一个逻辑视图名----实际的转发放在配置文件中进行管理。但因为Struts1框架出现的年代太早了,那时候还没有FreeMarker、Velocity等技术,因而没有考虑与这些FreeMarker、Velocity等视图技术的整合。
Struts1设计非常优秀,但是由于历史原因,他没有提供与更多视图技术的整合,这严重限制了Struts1的使用。
2.与Servlet API严重耦合,难于测试
因为Struts1框架是在Model2的基础上发展起来的,因此它完全基于Servlet API的,所以在Struts1 的业务逻辑控制器内,充满了大量的Servlet API。
看下面的Action代码片段:
当我们需要测试上面的Action类的execute方法时,该方法有4个参数:ActionMapping、ActionForm、HttpServletRequest、HttpServletResponse,初始化这4个参数比较困难,尤其是HttpServletRequest和HttpServletResponse两个参数,通常由Web容器负责实例化。
因为HttpServletRequest和HttpServletResponse两个参数是Servlet API,严重依赖于Web服务器。因此,一旦脱离了Web服务器,Action的测试非常困难。
3.代码严重依赖Struts1 API,属于侵入式设计
正如从上面代码片段中多看到的,Struts1 的Action类必须继承Struts1的Action基类,实现处理方法时,又包含了大量Struts1 API:如ActionMapping、ActionForm和ActionForward类。这种侵入式设计的最大弱点在于一旦系统需要重构时,这些Action类将完全没有利用价值。
摘至:Struts2 权威指南
相关推荐
Struts2 安全缺陷 Struts2 是一个流行的 Java WEB 框架,它提供了许多有用的功能来帮助开发者快速构建 Web 应用程序。然而,在开发和学习 Struts2 时,开发者需要注意一些安全缺陷,以避免安全漏洞。 Struts2 框架...
然而,如同任何复杂的软件系统,Struts2也存在安全缺陷。本篇文章聚焦于Struts2框架的安全问题,探讨了开发过程中可能引发的安全隐患,以及如何从攻击者的视角理解和防范这些问题。 首先,Struts2框架在Web应用中的...
然而,如同任何复杂软件系统一样,Struts2也存在一些安全缺陷,这些缺陷可能导致严重的安全问题,如SQL注入、跨站脚本(XSS)攻击等。 Struts2的安全问题主要集中在两个方面:框架本身的缺陷和开发者在使用框架时的...
3. **CVE-2018-11776:Struts2 Struts2 REST插件漏洞**:这是由于REST插件处理动态方法调用时的缺陷,攻击者可以利用这个漏洞执行任意代码。 4. **CVE-2019-18543:Struts2 Struts2 ActionMapper漏洞**:这个漏洞...
Struts2远程命令执行漏洞,通常被称为S2-045或CVE-2017-5638,是由于Struts2框架在处理特定的HTTP头信息时存在缺陷,导致攻击者可以构造恶意输入,使得服务器在解析时执行任意系统命令。这种漏洞的危险性极高,因为...
总之,Struts2.0不仅解决了原Struts框架的缺陷,如代码冗余和测试难度,还引入了一系列先进的特性和工具,使得Web应用的开发变得更加高效和优雅。通过上述的环境搭建和基本配置,开发者可以快速入门Struts2.0,开始...
S2-016 漏洞是由于 Struts2 的 Ognl 表达式语言解析器存在缺陷,从而导致攻击者可以 inject 恶意代码。这个漏洞影响了 Struts2 的所有版本。 S2-017 漏洞是由于 Struts2 的 DefaultActionMapper 的 ...
Struts2基础教程 Struts2是基于MVC模式的Web应用程序框架,它是Struts1.x的后续版本,但Struts2已经完全颠覆了Struts1.x的配置和使用...同时,我们也将比较Struts1.x和Struts2之间的差异,了解Struts2的优势和缺陷。
Struts2-045漏洞,全称为"Apache Struts2 S2-045漏洞",是一个在2017年被公开的安全缺陷,主要影响使用Apache Struts2框架的Web应用程序。这个漏洞源于Struts2的一个核心组件,即OGNL(Object-Graph Navigation ...
Struts2是一个流行的Java web应用程序...总之,Struts2单元测试对于保障代码质量、减少缺陷以及提高软件的可靠性具有重要意义。通过深入理解和有效利用提供的单元测试工具,开发者可以更自信地构建和维护Struts2应用。
1. **立即升级**: 如果你的应用程序使用了Apache Struts且版本低于2.3.32或2.5.10.1,应立即升级到这两个版本之一。 2. **安全配置**: 配置Struts以禁用不受信任的文件上传功能,或者使用更安全的文件解析器。 3. ...
1. **CVE-2017-9791(S2-045)**:这是一个远程代码执行漏洞,由于Struts2的StrutsPrepareAndExecuteFilter类在处理ActionMapper时存在缺陷,攻击者可以通过精心构造的HTTP请求头来触发这个漏洞,从而执行任意服务器...
虽然Struts 1目前还未被完全淘汰,但Struts 1所表现出来的缺陷已经处处制约着开发者的手脚。在2007年上半年,Struts 2终于在众多开发者期盼中,发布了第一个稳定版本:2.0.6。为了让众多Struts学习、工作者快速...
此版本修复了一些已知的安全漏洞和功能缺陷,提供了更稳定的应用程序开发环境。了解这个版本的源码可以帮助开发者解决与该版本相关的兼容性和性能问题。 Struts的核心组件包括: 1. ActionServlet:这是Struts的...
S2-016漏洞,全称为"Struts2 OGNL注入漏洞",是由于Struts2框架处理OGNL(Object-Graph Navigation Language)表达式时存在的安全缺陷,允许攻击者通过精心构造的输入,执行任意系统命令,从而对服务器造成严重威胁...
S2-053漏洞全称为"Struts2 REST Plugin远程代码执行",是Apache Struts2框架中的一个严重安全缺陷。该漏洞主要存在于Struts2的REST插件中,当用户提交特定格式的HTTP请求时,可能导致远程代码执行(RCE)。远程代码...
3. **Struts 1的技术特点与缺陷** - 技术特点:Struts 1引入了MVC模式,使代码结构更清晰,提供了数据校验和国际化功能。 - 缺陷:配置文件过多,导致维护困难;Action类与视图耦合度高,不利于代码复用;对动态...
1. **Struts2漏洞概述** Struts2的漏洞主要集中在其ActionMessage、ActionError和FreeMarker模板等组件上。例如,著名的S2-045、S2-048和S2-057等漏洞,都是由于框架处理用户输入时的不安全配置或解析逻辑错误导致...