struts2 2.3.20 ognl allowStaticMethodAccess

Pan*_*nos 7 java static-methods struts2 ognl

我将我的项目更新为Struts2版本2.3.20.现在,我的JSP中使用静态方法访问的所有情况都不起作用.

即.

<s:set var="linkEscaped"
 value="@org.apache.commons.lang.StringEscapeUtils@escapeHtml(#attr.myObject.link)" />
Run Code Online (Sandbox Code Playgroud)

我已经设置了我的struts.properties - >

struts.ognl.allowStaticMethodAccess=true
Run Code Online (Sandbox Code Playgroud)

并尝试在struts.xml - >

<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
Run Code Online (Sandbox Code Playgroud)

没有成功.有谁知道发生了什么变化,我需要做些什么才能再次启用它们?

Ale*_*r M 7

更新

Lukasz Lenart评论说:

要明确的是,在2.3.20的上下文中它是一个错误并且暂时被修复,请参阅issues.apache.org/jira/browse/WW-4429但是从2.5访问静态方法将被删除.

---

允许静态方法访问从来不是一种首选的方式,2.3.20即使struts.ognl.allowStaticMethodAccess设置为,它也不会起作用true.

来自维基:

访问静态方法

如果你仍然在表达式中使用静态方法(设置struts.ognl.allowStaticMethodAccesstrue),请注意这将不再起作用,因为内部安全机制认为这java.lang.Class是对排除的类列表的访问(见上文).临时解决方案是将上述内容复制到您的struts.xmljava.lang.Class从已排除的类中删除.

从表达式访问静态方法的支持将很快被禁用,请考虑重新分解您的应用程序以避免进一步的问题!请检查WW-4348.

此外WW-4429.


Pan*_*nos 0

由于静态方法将无法在未来的版本中使用,因此我决定重构项目中使用它们的部分。越早越好。

因此,在“BaseAction”中,我创建了我需要的方法,他们调用这些方法。这样只有我允许的“安全”方法才能在jsp中使用。