2015-08-14 3 views
2

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

Эта переменная 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"/> 

Теперь создадим класс, который расширяет MyTextProvierTextProviderSupport и переопределить getText() методы. Все методы принимают параметр key как String, и вы можете заменить ненужные символы на него. Затем позвоните super.getText(). Например

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

Спасибо, Роман. Решение работало нормально. –