前言:

目前大部分人的简历上面都写了熟悉ssh框架,尤其是刚才​学校​走出来或者刚从​培训机构​出来的学生。但是学校讲的Java都是按照教科书来讲,教科书更新速度慢,赶不上互联网发展的速度,一般讲的都是几年前流行的技术。这个时候学生就需要自学,那么自学的教程就来源于网上的各种培训机构,有些大型培训机构技术更新还不错,赶上互联网的步伐。但是有些小培训机构,没有那么强的师资力量,这个时候就比较坑爹了,对于完全外行的人都是简单培训了基本的java语法、Java web,在教一下ssh,ssm的使用,然后在做一个简单的实战项目,帮你做好简历,就算完成了培训。小型培训机构最擅长的不是技术,而是吹牛和洗脑,最后等你培训完出来面试,发现好像过了一个世纪,默默的问自己,怎么培训的和企业里要求的不一样。

ssh在很多年前确实挺火,但现在struts已经没落 ,spring很春天,hibernate不温不火,个人觉得现在培训机构还在教这个是有点过时了, 花费了学生的时间,并且出去可能也找不到工作,因为现在互联网企业里,已经很少用Struts了,除非是很老的项目,可能还在用Struts维护着,但是你去做很老的项目,有什么用?



一、Struts简介

Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个Servlet。在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts2是Struts的下一代产品,是在Struts1和WebWork的技术基础上进行了合并的全新的Struts2框架。其全新的Struts2的体系结构与Struts1的体系结构差别巨大。Struts2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts2可以理解为WebWork的更新产品。虽然从Struts1到Struts2有着太大的变化,但是相对于WebWork,Struts2的变化很小。



二、Struts从兴盛到衰落

Struts2在其流行的几年可谓是非常热门,不管你去哪个公司面试,都要求会SSH(Spring+Struts2+Hibernate),这里的SS指的是Spring和Struts2。但是现在,曾经风靡一时的Struts2最终被SpringMVC所取代,如果你做了五年以上的开发了,那肯定是接触过Struts2,你一定会知道Struts2的配置文件可谓是最头疼的,如果项目大了,那Servlet和配置会让人疯掉。另外,Struts还有一个通病就是他的请求是基于类的,而SpringMVC是基于方法的,请求域的范围不一样,相比之下SpringMVC要灵活得多。随着Spring快速的发展,使用SpringMVC的人也会随之增多。从另外一个角度来看,SpringBoot大家都很熟悉吧,零XML配置,全部采用JavaBean的形式,使维护起来更加方便。Struts2相比之下则显得十分臃肿,配置项太多。

如果说SpringMVC是初步淘汰了Struts2,那么SpringBoot的崛起基本上是彻底淘汰了Struts2,除了一些老项目还在维护之外,其他的新项目基本上都在用SpringBoot,谁也不想去用一个维护复杂,配置众多的项目。

主要还是Struts本身有问题,加上spring家族实在是强大,这就是所谓的弱肉强食。



三、Struts漏洞

我们举两个比较著名的漏洞:S2-045(CVE-2017-5638)和S2-046(CVE-2017-5638)。漏洞消息公布后,在互联网界引起了轩然大波。

编号S2-045是基于Jakarta plugin插件的Struts远程代码执行漏洞。该漏洞会造成RCE远程代码执行,恶意用户可在上传文件时通过修改HTTP请求头中的Content-Type值来触发该漏洞,进而执行系统命令,可直接造成系统被控制。黑客通过Jakarta文件上传插件实现远程利用该漏洞执行代码。

编号S2-046的漏洞则是攻击者可通过Content-Length或者Content-Disposition构造恶意的OGNL内容,同样会造成远程代码执行。

此前某东的12GB用户信息数据包在网络上外泄的事件就是源自2013年 Struts 2的安全漏洞造成。泄露的数据包中包括了某东的用户名、密码、邮箱、QQ号、电话号、身份证信息等,其内部数据多达数千万条。某东在2016年12月10日也通过官方微信公众号针对此事件进行了证实与回应。

还有很多其他的漏洞,几乎每个漏洞都很致命,所以这就是为什么企业都放弃了Struts,这也是我为什么不让你们学Struts的原因。老哥跟你们说的都是良心话,不会害你们的,所以千万别被不良的培训机构洗脑。如果有些公司让你搞Struts,那这种公司也没什么前途了,赶紧逃离吧。