防止getText()评估EL表达式

时间:2015-08-14 11:02:11

标签: java regex jsp struts2 ognl

在Struts2后端,我有一个动作类实例变量,例如:keyName。返回到视图的动态键(JSP)。

使用POST方法使用请求参数设置此keyName变量。根据请求参数值,keyName会有所不同。

在JSP中,我使用<s:property value="getText(keyName)" />来显示与keyName变量给出的键对应的标签。

当我将例如${90-40}的EL表达式发送到keyName时,正在评估此表达式,并在UI上显示50。

我们如何使用getText()来避免或阻止此类EL注入?

还有其他替代方式而不是<s:property value="getText(keyName)" />吗?

2 个答案:

答案 0 :(得分:2)

您可以创建自己的文本提供程序并在struts.xml中注册它:

<constant name="struts.xworkTextProvider" value="com.struts.text.MyTextProvier"/>

现在创建一个扩展MyTextProvier并覆盖TextProviderSupport方法的类getText()。所有方法都将参数key作为String,您可以从中替换不需要的字符。然后拨打super.getText()。例如

public String getText(String key) {
  return super.getText(key.replaceAll("[\\$\\{\\}]", ""));
}

答案 1 :(得分:1)

使用<s:text name="keyName" />

http://struts.apache.org/docs/text.html