Запретить getText() вычислять выражения EL

В бэкэнде Struts2 у меня есть переменная экземпляра класса действия, например: keyName, Динамический ключ возвращается в представление (JSP).

это keyName переменная устанавливается с помощью параметра запроса, используя метод POST. В зависимости от значения параметра запроса keyName будет меняться.

В JSP я использую <s:property value="getText(keyName)" /> показать метку, соответствующую ключу, заданному переменной keyName.

Когда я отправляю выражение EL например ${90-40} в keyName это выражение оценивается и в результате отображается 50 на пользовательском интерфейсе.

Как мы можем избежать или предотвратить такую ​​инъекцию EL с getText()?

Есть ли другой альтернативный способ вместо <s:property value="getText(keyName)" />?

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("[\\$\\{\\}]", ""));
}

Использование <s:text name="keyName" />

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

Другие вопросы по тегам