Каков правильный путь к файлу внутри папки webapp, который будет использоваться для защищенных просмотров в JSF2.2? [Дубликат]

Статья о Использование памяти Redis может помочь вам приблизительно определить, сколько памяти потребуется вашей базе данных.

5
задан BalusC 17 March 2015 в 18:04
поделиться

1 ответ

Это вызвано тем, что ваш FacesServlet, по-видимому, отображается в шаблоне URL-стиля JSF 1.0 в *.faces вместо шаблона URL-стиля в стиле JSF 2.0 *.xhtml. <protected-views><url-pattern> должен соответствовать фактическому шаблону URL-адреса, как вы видите в адресной строке браузера.

Итак, учитывая фактический URL-адрес /protected/facelet2.faces, вам необходимо настроить его, как показано ниже:

<protected-views>
    <url-pattern>/protected/facelet2.faces</url-pattern>
</protected-views>

Однако в то время как в нем я обнаружил некоторые неприятные проблемы в текущей реализации Mojarra 2.2.10:

  1. На самом деле это не означает совпадение префикса / суффикса в соответствии с Servlet 12.1 спецификация ( в исходном коде есть даже неопределенный комментарий, указывающий, что !). Это просто точное совпадение. Это означает, что вы не можете использовать шаблоны шаблонов подстановочных знаков, например /protected/*.
  2. При генерации <h:link> он не сравнивает шаблон защищенного вида URL с разрешенным URL, а с идентификатором вида JSF , И, проверяя входящий запрос, он не сравнивает URL-адрес запроса с идентификатором вида JSF (например, во время создания ссылки), а к <url-pattern>. Это, таким образом, никогда не совпадает, полностью объясняя, почему вы можете просто получить к нему доступ без действительного токена.

В принципе, вам нужна следующая конфигурация, если вам нужно сохранить шаблон URL-стиля JSF 1.0 в *.faces.

<protected-views>
    <url-pattern>/protected/facelet2.xhtml</url-pattern>
    <url-pattern>/protected/facelet2.faces</url-pattern>
</protected-views>

Затем он будет правильно кидать javax.faces.application.ProtectedViewException при обращении без действительного токена. Намного лучше всего просто отобразить FacesServlet на *.xhtml в web.xml.

<servlet-mapping>
    <servlet-name>facesServlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

Таким образом вам никогда не придется иметь дело с виртуальными URL-адресами.

.

См. также:

5
ответ дан BalusC 16 August 2018 в 10:57
поделиться
  • 1
    Я также заметил проблему с шаблонами URL, довольно неприятную проблему. Спасибо за действительно полный ответ! – CJ1 18 March 2015 в 19:07
  • 2
    Пожалуйста. – BalusC 18 March 2015 в 19:09
Другие вопросы по тегам:

Похожие вопросы: