Я пытаюсь - с JSF 2.0 - реализовать аккуратным способом управление логином/записью/выводом. Поскольку традиционный способ <form action="j_security_check" ...
не обладает гибкостью, я решил пойти по другому пути, но я нашел проблему.
Декларативная безопасность правильно устанавливается как на сервере приложений через <security-domain>
, так и в web.xml через <security-constraint>
, <login-config>
и <form-login-page>
.
Страница входа:
<h:form id="loginForm">
<h:panelGrid columns="2" cellspacing="5">
<h:outputText value="Username" />
<h:inputText value="#{loginBean.username}" />
<h:outputText value="Password:" />
<h:inputText value="#{loginBean.password}" />
<h:outputLabel value=""/>
<h:commandButton value="Login" action="#{loginBean.login}" />
</h:panelGrid>
</h:form>
И простой LoginBean # login():
public String login( )
{
HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance( ).getExternalContext( ).getRequest( );
try {
request.login( username, password );
}
catch ( ServletException e ) {
FacesContext.getCurrentInstance().addMessage( "Unknown login...
return null;
}
return "i_dont_know_where_you_were_going";
}
Все работает нормально, но после успешного входа я не знаю, как перенаправить пользователя в исходный запрос. Поскольку страница входа автоматически вставлена между запросом клиента и "любым" защищенным ресурсом, мне нужен способ понять, где перенаправить действие. request.getRequestURL( )
не помогает, возможно, из-за RequestDispatcher#forward()
(который перезаписывает запрос url). Считаете ли вы, что это подходящий способ управления процессом входа в систему? Если да, то какой-нибудь намек на проблему?
Спасибо большое!