最近接到上面安全中心的通知, 说我们的工程有struts2的漏洞, 一看是S-016/S-017类似远程执行恶意代码的漏洞, 好吧升级。
之后各种百度升级好后, 碰到一个恶心的问题, jsp的<s:action>标签出错, 例如<s:action name="attach!findAll" executeResult="true" namespace="">
</s:action> , 控制台会告诉你attach!findAll 找不到方法, 然后各种百度google, 然后找到一篇说“struts.enable.DynamicMethodInvocation”,
struts.enable.DynamicMethodInvocation
作用:动态调用action方法,action!method
源码:org.apache.struts2.dispatcher.mapper.DefaultActionMapper
protected ActionMapping parseActionName(ActionMapping mapping) {
if (mapping.getName() == null) {
return null;
}
if (allowDynamicMethodCalls) {
// handle "name!method" convention.
String name = mapping.getName();
int exclamation = name.lastIndexOf("!");
if (exclamation != -1) {
mapping.setName(name.substring(0, exclamation));
mapping.setMethod(name.substring(exclamation + 1));
}
}
return mapping;
}
查了下就是这个地方, 新版本的allowDynamicMethodCalls默认为false, 而2.3.4版本的为true
所以, 在struts配置文件加上<constant name="struts.enable.DynamicMethodInvocation" value="true"/>,测试通过。给碰到同样问题的同学留个参照。
备注: http://archive.apache.org/dist/struts/ 官网资源下载地址