Как и ожидалось, страница входа загружается при запросе защищенного/безопасного ресурса:
<login-config>
<auth-method>FORM</auth-method>
<realm-name>jdbc</realm-name>
<form-login-config>
<form-login-page>/login.xhtml</form-login-page>
<form-error-page>/login.xhtml</form-error-page>
</form-login-config>
</login-config>
Я понимаю, что j_security_check
автоматически перенаправляется на защищенный/защищенный ресурс, если аутентификация прошла успешно:
<form method="post" action="j_security_check">
<input type="text" name="j_username">
<input type="password" name= "j_password">
</form>
Тем не менее, я хотел бы разрешить пользователям зарегистрироваться (или войти в систему), чтобы продолжить, поэтому я использовал JSF 2.0: <h:form...
, EL: #{loginBean.register()}...
и т. д., и я программно аутентифицируюсь с помощью Servlet 3.0:
public void register() {
HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
try {
// Register...
request.login(this.username, this.password);
// Redirect to the protected/secure resource...
} catch (ServletException e) {
...
}
}
Как узнать, что это за изначально запрошенный ресурс? Возможно:
- Получить «сохраненный запрос» из сеанса (для конкретного контейнера)?
- Попробуйте как-нибудь получить доступ к "исходному запросу" (где)?
- Что-нибудь, связанное с диспетчером запросов (смелая догадка)?
- Использовать заголовок «referer» (плохая идея)?
- Создать модуль проверки подлинности сервера (SAM) (не просто)?
Любой совет будет очень признателен!