2010-09-23 9 views
1

我有一個Web應用程序,部署在使用容器管理的安全性的GlassFish 3.0.1上。這是一個使用j_security_check針對JDBCRealm的簡單,標準的基於表單的實現。所有與保護應用程序有關的事情都很好(我不相信我過去曾經推出過我自己的安全系統)。使用基於容器管理的安全表單重試登錄

我似乎無法弄清楚,但是如何處理用戶輸入錯誤密碼的情況。我的「loginFailed.xhtml」頁面顯示正確,但我想然後只是引導用戶回到登錄頁面(通過鏈接或自動)再次嘗試。

當我試過這個鏈接返回到login.xhtml頁面工作正常,但安全系統似乎已經忘記了它試圖發送用戶後,他們已經通過身份驗證。當用戶正確地進行身份驗證時,會引發異常,因爲系統嘗試加載不存在的頁面(某些頁面URL的損壞版本)。

我想我可以引導用戶回到主頁,讓他們再次嘗試從那裏,但我還沒有看到一個應用程序長時間很多kludge。所有的想法和幫助,感激地收到...

回答

0

我假設你只是在一個普通的html頁面上使用j_security_check,是否正確?您現在可以使用HttpServletRequest#登錄方法實際執行程序化登錄。

這裏是一個例子。

public String login() { 

    FacesContext context = FacesContext.getCurrentInstance(); 
    HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest(); 

    try { 
     request.login(this.userName, this.password); 
     return "index?faces-redirect=true"; 
    } catch (Exception e) { 
     return "error?faces-redirect=true"; 
    } 

因此,您可以在他們登錄後隨時隨地發送。這只是一個帶有用戶名和密碼成員變量的標準JSF支持bean。

h:commandButton使用此登錄方法作爲jsf操作。

0

確實,如果你不想在你的java中管理登錄,另一個解決方案是使用javascript。

的login.html(簡單的HTML表單)

<form name="loginForm" method="POST" action="j_security_check"> 
    <input id="username" type="text" /> 
    <input id="password" type="password" /> 
    <input type="submit"value="Login" /> 
</form> 

那麼對於剛剛的error.html添加一些JavaScript到身體的onload

function redirect() { 
window.location("http://yournewurl") 
} 
相關問題