Я только начинаю разрабатывать веб-приложения и начал с JSF 2.2 на Java EE 7, GlassFish 4.
Я думал, что начну с самых азов. Я просто хочу защитить весь сайт, поэтому каждая страница, на которую вы переходите, сначала потребует от вас аутентификации. Итак, я прочитал учебник по Java EE 7 и попробовал образцы, модифицировал их, а затем начал ломать их так, как я не думал, что они сломаются. Я пробовал разные ракурсы, но обычно попадал в две ситуации:
- Я бы попытался получить доступ к странице, используя частичный запрос, который приведет меня к
/index.xhtml
, как определено<welcome-file-list>
, и мне будет предложено войти в систему; но при отправке имени пользователя/пароля я сразу же возвращаюсь к форме входа. - Я добавил действие к
<h:commandButton>
, чтобы указать наindex
. Это сработало, но когда я отправил форму на странице индекса, которая должна была привести меня на страницуresponse.xhtml
, я бы вернулся к форме входа, а не к странице ответа.
После многих часов блужданий по сети мне показалось, что причина, по которой я нарушил процедуру входа в систему, заключалась в том, что я изменил простую HTML-форму входа, чтобы использовать теги JSF, такие как <h:form>
, вместо <form>
.
Существует обсуждение здесь говорится, что вы не должны делать это с формами входа. Процитирую интересную строчку с этой страницы:
Чтобы создать такую страницу входа, сделайте фактическую форму входа HTML, а не JSF, и закодируйте ее в соответствии со стандартами j2EE для форм входа. Используйте тег формы HTML вместо формы JSF и убедитесь, что вы кодируете кнопку HTML SUBMIT, а не commandButton JSF!
Как только я изменил его на старый добрый HTML, он заработал. Но я не понимаю, почему. Кто-нибудь может меня просветить?! Я думаю, что мне не хватает чего-то фундаментального, что мне нужно понять, если я собираюсь начать писать веб-приложения в JSF.
Большое спасибо...