Java struts2.3.20 ognl allowStaticMethodAccess

Java struts2.3.20 ognl allowStaticMethodAccess,java,struts2,static-methods,ognl,Java,Struts2,Static Methods,Ognl,我将我的项目更新为Struts2 2.3.20版。现在,我的JSP中使用静态方法访问的所有情况都不起作用 即 并在struts.xml中尝试-> <constant name="struts.ognl.allowStaticMethodAccess" value="true"/> 没有成功。有人知道发生了什么变化,我需要做什么才能再次启用它们吗?更新 卢卡斯·勒纳特评论道: 需要明确的是,在2.3.20的上下文中,它是一个bug,是暂时修复的,请参见issues.apache.

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

并在struts.xml中尝试->

<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>


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

更新

卢卡斯·勒纳特评论道:


需要明确的是,在2.3.20的上下文中,它是一个bug,是暂时修复的,请参见issues.apache.org/jira/browse/WW-4429,但从2.5开始,将放弃对静态方法的访问

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

从:

访问静态方法

如果您仍然在表达式中使用静态方法(设置<代码> strut.OnnL.AsvsTraceMealAccess 到Trime),请注意,由于内部安全机制认为这是访问“代码> java .Lang.Cype < /COD>,这是在排除的类列表中(见上文),所以这将不再起作用。临时解决方案是将上述内容复制到

struts.xml
中,并从排除的类中删除
java.lang.Class

从表达式中访问静态方法的支持将很快被禁用,请考虑重构您的应用程序以避免进一步的问题!请查收


另外。

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


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

我成功了。从struts default.xml中复制以下内容,并将其复制到应用程序的struts.xml中。

<constant name="struts.excludedClasses"
          value="
            java.lang.Object,
            java.lang.Runtime,
            java.lang.System,
            java.lang.Class,
            java.lang.ClassLoader,
            java.lang.Shutdown,
            ognl.OgnlContext,
            ognl.MemberAccess,
            ognl.ClassResolver,
            ognl.TypeConverter,
            com.opensymphony.xwork2.ActionContext" />

仅从上面删除java.lang.Class。保存、编译、构建和部署。快乐的日子


但我们正在为此制定退出策略。我们正在提醒我们的所有开发人员不要再使用静态访问,并开始删除它(虽然我们没有很多地方使用它)

@AleksandrM这绝对是一个答案。这是一条突发新闻,应该尽可能多地加以强调。把它作为答案贴出来,这样我们就可以把它投给你的朋友。不要盲目更新而不阅读它们。也就是说,在我看来,清理数据的地方是错误的。在视图层之前完成这项工作。需要明确的是,在2.3.20的上下文中,这是一个bug,是暂时修复的,请参阅,但从2.5开始,将放弃对静态方法的访问。请参阅以获取解决方法
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
<constant name="struts.excludedClasses"
          value="
            java.lang.Object,
            java.lang.Runtime,
            java.lang.System,
            java.lang.Class,
            java.lang.ClassLoader,
            java.lang.Shutdown,
            ognl.OgnlContext,
            ognl.MemberAccess,
            ognl.ClassResolver,
            ognl.TypeConverter,
            com.opensymphony.xwork2.ActionContext" />