我将项目更新为Struts2 2.3.20版。现在,我的JSP中使用静态方法访问的所有情况都不起作用。
即。
<s:set var="linkEscaped" value="@org.apache.commons.lang.StringEscapeUtils@escapeHtml(#attr.myObject.link)" />
我已经在我的struts.properties中设置了->
struts.ognl.allowStaticMethodAccess=true
并在struts.xml->中尝试过
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
没有成功。有谁知道发生了什么变化,我需要怎么做才能再次启用它们?
更新资料
卢卡斯·莱纳特(Lukasz Lenart)评论:
需要明确的是,在2.3.20的上下文中,它是一个错误并已暂时修复,请参见issue.apache.org/jira/browse/WW-4429,但从2.5开始,将放弃对静态方法的访问。
允许静态方法访问从来都不是首选的处理方式,2.3.20即使将struts.ognl.allowStaticMethodAccess其设置为,也无法使用true。
从维基:
访问静态方法
如果您仍在表达式中使用静态方法(设置struts.ognl.allowStaticMethodAccess为true),请注意,由于内部安全机制将其视为java.lang.Class对已排除类的列表(请参见上文)的访问,因此它将不再起作用。临时解决方案是将以上内容复制到您的内容中,struts.xml并java.lang.Class从排除的类中删除。
从表达式访问静态方法的支持将很快被禁用,请考虑重构您的应用程序以避免进一步的问题!请检查WW-4348。
还有WW-4429 。