2013-03-04 75 views
4

我有一個運行在JBoss 7.1.1上的Java EE 6 Web應用程序,它有一些頁面需要驗證,而有些頁面不需要驗證。對於已驗證的頁面,我正在使用Servlet 3.0 Programmatic Security,如this previous post中所述。Java EE 6安全性和重定向

在我的web.xml,我有以下條目

<login-config> 
    <auth-method>FORM</auth-method> 
    <form-login-config> 
    <form-login-page>/login</form-login-page> 
    <form-error-page>/loginError</form-error-page> 
    </form-login-config> 
</login-config> 

,並在我的登錄類,我有@PostConstruct註釋的方法,其中請求的頁面被捕獲: String previousURL = (String) FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get(RequestDispatcher.FORWARD_QUERY_STRING)

然而,它評估爲/ login頁面本身,而不是用戶請求的頁面,因爲web.xml中的login-config設置,所以它是由JBoss轉發的,然後是。因此,當我轉到previousURL時,它只是將我帶回登錄頁面,而不是用戶最初單擊的頁面。我究竟做錯了什麼?

回答

1

您試圖檢索錯誤的屬性。你應該試圖檢索的是RequestDispatcher.FORWARD_REQUEST_URI這是一個真正的URI。你目前試圖檢索的是查詢字符串(基本上是任何在實際URL之後的東西; ?param=1 etc)遵循請求的網址

+0

感謝您的支持。在改變它之後,我仍然將前一個URL放到/ login頁面,而不是最初請求的頁面。 – Anand 2013-03-05 20:09:16

+0

而你是正面的@並且提供的用戶憑證已被成功驗證? – kolossus 2013-03-06 04:01:46

+0

我這麼認爲。這裏是JBoss的日誌條目:'Excuting query:select password from PRINCIPAL where username =?,with username:admin ... User'admin'authenticated,loginOk = true commit,loginOk = true ... 指定用戶到角色管理 ... 用戶:admin已通過身份驗證 – Anand 2013-03-06 17:50:30