Python из двух методов получил другой результат

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

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


    /protected/facelet2.faces


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

  1. На самом деле это не означает совпадение префикса / суффикса в соответствии с Servlet 12.1 спецификация ( в исходном коде есть даже неопределенный комментарий, указывающий, что !). Это просто точное совпадение. Это означает, что вы не можете использовать шаблоны шаблонов подстановочных знаков, например /protected/*.
  2. При генерации он не сравнивает шаблон защищенного вида 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-адресами.

.

См. также:

3
задан Drudox lebowsky 13 July 2018 в 18:10
поделиться