关于Struts2的碎碎念

一:安全,还是安全

我入行比较晚,那会Spring MVC什么的都很流行了,一直觉得struts2作为一个Web MVC框架实在太笨重了点。所以虽然之前一直在用,但是其实没有真正研究过。

今天公司又遇到一个比较严重的struts的安全问题,最后检查了很久,换最新版也无效。但是因为公司一直在用strtus2,作为一个爱着自己工作的人(逃),还是决定大致了解一下struts2的源码了。

直接读代码难免一头雾水,这里推荐一本书《Struts2技术内幕》,有书上的理论作指导就容易得多。这本书讲的挺详细,同时在设计思想上也有不少着力,非常值得一读。

看了一部分代码后,仔细调试了一下,确认了这个是一个比较严重的安全问题,不知道是否已被官方发现,但是确实在最新版2.3.15.3中仍存在。已经发了邮件给官方,希望能得到一个好的解决方案。

但是本文的主要的目的不在这里。本文就是理一下struts2的里里外外,不至于遇到问题一头雾水,就足够了。

二:struts2概览

struts2结构图如下(自己画的,可能不严谨):

OGNL是底层的表达式引擎,也是安全方面广为诟病的地方。

XWork是个什么东西呢?它可以理解为一个请求-响应模式的通用框架(不仅仅局限于Web),这个Action就是一个命令。而struts2可以说是XWork在web领域的一个特定实现。

XWork是包括Action/Interceptor/Result几个大部分,还有用于执行流程的ActionProxy和ActionInvoker,以及处理数据的ActionContext和ValueStack。XWork的执行流程如下(这里引用了《Struts2技术内幕》的图):

三:关于框架的设计思想

今天说到在读struts代码,jFinal的作者@jFinal 说struts代码很烂。

可能我功力不够,倒是没觉得代码很烂,struts2的代码层次化、结构化、扩展性其实都做得不错,比如动态插件机制,比如Result是一个接口,里面包含了一个excute()方法用于决定渲染方式等。但是设计思想上,可能与当前的趋势不符了。

struts2有个很重要的设计思想:解耦。它希望框架不要侵入业务,包括servlet API里的request/response,尽量让大家写一个POJO就好了。这个POJO脱离了框架,甚至是在其他领域都是可用的。其实在如今web大行其道的时代,其实也没有人会需要无侵入的框架进行迁移,这种设计也不知该说超前还是过时了,但是反而会带来一些不便。

相反,我觉得框架就该限定领域,好的框架应该提供必要的约束,清晰勾勒出这个领域开发的一种方式,而不是一味追求通用性。这一点我觉得Spring MVC就做的好一些,大家的接受程度也会比较高。场景越确定,框架能做的事越多,开发就越方便,比如jFinal这种框架。

对于struts,我只能说可能当年的web还未一统天下,大家仍有不同场景的需求吧。

PS:Web框架是个很大很热的话题,博主一家之言,大家听听就好。

时间: 2024-12-17 01:27:30

关于Struts2的碎碎念的相关文章

工作中的感悟 (三)三个月碎碎念篇

感慨一下来这里工作已经有一个月了,从最初的不是很适应这里的节奏,到慢慢适应了这里的生活,中间的过程就像经过一场暴风雨的洗礼虽然说的有点夸张,但是也是差不多吧,同在学校比要累很多,不过坚信不管再累.也要坚持既然有人有干,那我们就可以干我们没有什么理由坚持不了.别人可以做到的我们一样可以做到. 刚来的时候以一种无所谓.既兴奋又有很多好奇的心态来到了北京,这里很多人梦想的地方,不禁感慨以后我也在北京这里开始了这里的生活,时间长了究竟会是怎样一种心境呢,据说这里压力大.这里消费高.这里租房忒别烦人,来到

一些关于Linux入侵应急响应的碎碎念

近半年做了很多应急响应项目,针对黑客入侵.但疲于没有时间来总结一些常用的东西,寄希望用这篇博文分享一些安全工程师在处理应急响应时常见的套路,因为方面众多可能有些杂碎. 个人认为入侵响应的核心无外乎四个字,顺藤摸瓜.我们常常需要找到比较关键的信息后通过一些指令查询或者分析日志,逐步分析黑客的具体步骤. 入侵后需要被关注的Linux系统日志 var/log/cron 记录crontab命令是否被正确的执行,一般会被黑客删除 var/log/lastlog 记录登录的用户,可以使用命令lastlog查

【碎碎念】百度前端技术学院春季班

早上迷迷糊糊被读研阶段的室友的微信叫醒了,邀约组队参加百度前端技术学院春季班(http://ife.baidu.com/),前室友在前端方面还是有一定造诣的,自己本身对前端开发又有一定兴趣,因此准备组团参与下. 想想我的技能树长得确实有点奇葩,最早是做嵌入式的,做了三个月点唱机跑去做产品和实施,跑完了大半个福州高校做某系统推广与实施后觉得做开发的童鞋的Bug有点多就边实施边改代码,久而久之就慢慢转向了开发,想想读研阶段白天上班写C#晚上下班写实验室的Java横向项目的经验也是蛮奇葩的,导致现在我

碎碎念

最近心情莫名的低落,明天就要上班了,希望紧张的生活节奏能让我的生活充实起来. 碎碎念,布布扣,bubuko.com

Oracle碎碎念

1. 设置SQL*Plus提示符 SQL> set sqlprompt "_user'@'_connect_identifier>" [email protected]> 为了对所有的SQL*Plus会话自动设置sqlprompt,将上面的命令放置在ORACLE_HOME/sqlplus/admin目录中的glogin.sql文件内 2. 查看角色RESOURCE被授予的系统权限 SQL> select * from dba_sys_privs where gr

Suse碎碎念

1. 如何查看Suse的版本号 vmpbos01:~ # lsb_release -d Description: SUSE Linux Enterprise Server 11 (x86_64) Suse碎碎念,布布扣,bubuko.com

OCS 2007与Lync 2013的一点碎碎念

最近的项目,跨度都比较大.这次碰上的是OCS2007升级Lync 2013.以下记录一些过程心得(吐槽),类似那篇<2003到2012>的博文. 最开始的计划是OCS2007(不带R2)全部推倒干净,然后启Lync2013.商量来商量去,怕推不干净的话,Lync2013部署会有问题.于是就想着OCS2007迁到R2再迁到Lync2013. 这时候一个非常屌的问题出现了! 原有OCS2007是企业版带有后端数据库,客户对于Lync2013企业版的价格有点唏嘘,需求也不高遂只要用标准版-那么-标准

工作一周年碎碎念

去年7月3日入职公司到现在,马上就要一周年了,觉得有必要写篇文章唠叨下. 期间在部门内转了一次组(那次换组可以看我之前那篇入职一个半礼拜写的文章,当时其实蛮失意的),现在又马上要转去另一个部门,自我评价算是比较爱折腾的:),可能比较好的做法是卡下述职评级时间再考虑换岗,哈哈.我在考虑换个环境的时候,单纯就是冲着技术方向和氛围走的,其实现在组里的同事.经理都非常nice,关系也蛮融洽,工作强度也不强,除了项目之外也腾得出自己的时间,照理说没必要换部门.但是总体感觉现在工作氛围有点轻松,技术氛围离我

Jerry的碎碎念:SAPUI5, Angular, React和Vue

去年我去一个国内客户现场时,曾经和他们IT部门的一位架构师聊到关于在SAP平台上进行UI应用的二次开发时,UI框架是选用UI5还是Vue这个话题. 我们代表SAP, 向客户推荐使用UI5是基于以下六点原因: Fiori consists of a large number of UI controls aimed at Enterprise application developed by top JavaScript developers in SAP. Those UI controls p

一个十二年老程序猿的碎碎念h5牛牛程序出售

我是一名程序猿,在上95年上初中的时候h5牛牛程序出售(http://h5.hxforum.com) 联系方式170618633533企鹅2952777280 源码出售 房卡出售 后台出租有意者私聊扣扣,别的还在都在打篮球.踢足球的时候,我就已经在玩QBasic了,每逢跟其他程序猿说起这段的时候,大家都会投过来羡慕的眼光,其实没有你们想的那么好,反而挺悲催的,当时的同学们都不知道我在说些啥,另外我至今都不会打篮球.踢足球.果然不出意外(不会有意外的,我大学填报的所有志愿都是计算机系)的大学毕业后