Проблема с пересылкой JSF и ограничениями безопасности
Вопрос
Я создаю веб-приложение, в котором определенные страницы защищены входом в систему.Для этого я создал область безопасности JDBC в Glassfish и использовал аутентификацию формы (аналогично методу описано здесь)
Я использую правила навигации для перенаправления пользователя в защищенные области веб-сайта:
<navigation-case>
<from-outcome>showResults</from-outcome>
<to-view-id>/SecureUser/Reservation/New/AvailableResults.xhtml</to-view-id>
<redirect/>
</navigation-case>
(etc...)
Это работает нормально.Но если я пропущу тег перенаправления в навигационном корпусе, URL-адрес страницы не изменится.И в этом случае неаутентифицированный пользователь сможет получить доступ к защищенной странице.
Как лучше всего это сделать?Достаточно убедиться, что страница перенаправляется, а не пересылается?Должен ли я писать код на каждой защищенной странице, который проверяет, вошел ли пользователь в систему или нет?
Решение
Использование POST для навигации между страницами считается плохой практикой.Не используйте JSF h:commandLink
или h:commandButton
для простой навигации между страницами.Оба генерируют форму POST, которая совершенно не нужна и не оптимизирована для SEO для простой навигации.Скорее используйте h:link
или h:button
вместо.Он отображает простую ссылку GET и форму GET соответственно.
Если вы все равно отправляете форму POST и страница результатов отличается от страницы формы, то использование Шаблон PRG (Post-Redirect-Get) считается хорошей практикой.Вы можете использовать <redirect/>
для этого.