Это вызвано тем, что ваш FacesServlet
, по-видимому, отображается в шаблоне URL-стиля JSF 1.0 в *.faces
вместо шаблона URL-стиля в стиле JSF 2.0 *.xhtml
.
должен соответствовать фактическому шаблону URL-адреса, как вы видите в адресной строке браузера.
Итак, учитывая фактический URL-адрес /protected/facelet2.faces
, вам необходимо настроить его, как показано ниже:
/protected/facelet2.faces
Однако в то время как в нем я обнаружил некоторые неприятные проблемы в текущей реализации Mojarra 2.2.10:
/protected/*
.
он не сравнивает шаблон защищенного вида URL с разрешенным URL, а с идентификатором вида JSF , И, проверяя входящий запрос, он не сравнивает URL-адрес запроса с идентификатором вида JSF (например, во время создания ссылки), а к
. Это, таким образом, никогда не совпадает, полностью объясняя, почему вы можете просто получить к нему доступ без действительного токена. В принципе, вам нужна следующая конфигурация, если вам нужно сохранить шаблон URL-стиля JSF 1.0 в *.faces
.
/protected/facelet2.xhtml
/protected/facelet2.faces
Затем он будет правильно кидать javax.faces.application.ProtectedViewException
при обращении без действительного токена. Намного лучше всего просто отобразить FacesServlet
на *.xhtml
в web.xml
.
facesServlet
*.xhtml
Таким образом вам никогда не придется иметь дело с виртуальными URL-адресами.
.