Struts2 的一些记录
2023-11-13 23:40:50
Struts2-061
依赖:
1 | <dependency> |
这里有一个二次渲染的,感觉挺牛逼的。
当模板这样的时候:
首先会在这里:
1 | org.apache.struts2.components.UIBean#setId |
看注解应该是找 Tag
的 Id
属性。
然后这里有个关键点就是 findString
了,因为我们 id
设置的是 %{3-1}
,他会去找到这个值然后赋值,我的理解感觉类似二次注入似的。
然后在同类的另一个函数:
1 | org.apache.struts2.components.UIBean#populateComponentHtmlId |
一直往里走就会走到执行表达式的地方了。
修复方法
那么最新版怎么修复的呢:
直接不 findString 就好了
Struts2-062
这个和 061 一样,就一起做个简单分析就好了,在同样的类中:
首先是 end 函数,进入:
1 | org.apache.struts2.components.UIBean#evaluateParams |
findString
是会执行一次表达式的,然后赋值给局部变量 name
以后,下面又执行了一次:
也是二次注入。
修复方法
新版也是做了一些改动,首先这部分还是一样:
但是下面会做一些判断:
就是两个条件
translatedName
在上面经过解析以后和原先的name
还是一样- 通过
isAcceptableExpression
过了这两个就可以执行表达式了(应该,还没具体跟到执行里面是否还有沙箱过滤