我試圖用JSF 2.0來以一種整潔的方式實現登錄/記住我/註銷管理。由於傳統的<form action="j_security_check" ...
方式缺乏靈活性,我決定採用不同的方式,但是我發現了一個問題。用戶使用JSF 2.0登錄
通過<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#登錄():
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)干預。你認爲這是管理登錄過程的適當方式嗎?如果是這樣,關於這個問題的任何暗示?
非常感謝!