Java struts2.3.20 ognl allowStaticMethodAccess
我将我的项目更新为Struts2 2.3.20版。现在,我的JSP中使用静态方法访问的所有情况都不起作用 即 并在struts.xml中尝试->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.
<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 到
中,并从排除的类中删除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" />