У меня есть страница XHTML JSF2, которая определяет параметры просмотра, это позволяет иметь URL-адреса для закладок. Страница XHTML включает параметры:
<f:metadata>
<f:viewParam name="searchName" value="#{nbsearchpage.searchName}" />
<!-- More view parameters omitted here for brevity -->
<f:event listener="#{nbsearchpage.searchPreRender}" type="javax.faces.event.PreRenderViewEvent" />
</f:metadata>
На той же странице у меня есть текстовое поле и кнопка, которая позволяет пользователю изменять searchName:
<h:form id="some-id">
<h:inputText value="#{nbsearchpage.searchName}" />
<h:commandButton value="search" action="#{nbsearchpage.search}" />
</h:form>
и, наконец, метод действия search () в bean-компоненте nbsearchpage возвращается к та же страница, но с параметрами:
?faces-redirect=true&includeViewParams=true
, который предоставляет пользователю красивый URL. Когда пользователь вводит "IBM" в поле поиска, URL-адрес перенаправляется на
?searchName=IBM
. Он работает отлично. Но теперь пользователь может введите выражение EL в текстовое поле searchName, и выражение EL будет вычислено. Например,когда пользователь вводит "# {2 + 2}" в текстовое поле, URL-адрес перенаправляется на
?searchName=4
, и это то, что, я думаю, нам не следует делать, позволяя пользователю вводить выражение EL по соображениям безопасности. Я использую Glassfish 3.1.1.
Есть идеи, как предотвратить это автоматическое разрешение EL? Я думаю, что есть фундаментальный недостаток концепции параметров представления в JSF2 и перенаправления? У меня была такая же проблема с областью представления, которая не переживает перенаправления, и для этого мне пришлось создать собственную область. (Я мог бы использовать вспышку).