JSP和Struts解決使用者退出問題

來源:互聯網
上載者:User

在一個有密碼保護的Web應用中,正確處理使用者退出過程並不僅僅只需調用HttpSession的invalidate()方法。現在大部分瀏覽器上都有後退和前進按鈕,允許使用者後退或前進到一個頁面。如果在使用者在退出一個Web應用後按了後退按鈕瀏覽器把緩衝中的頁面呈現給使用者,這會使使用者產生疑惑,他們會開始擔心他們的個人資料是否安全。許多Web應用強迫使用者退出時關閉整個瀏覽器,這樣,使用者就無法點擊後退按鈕了。還有一些使用javascript,但在某些用戶端瀏覽器這卻不一定起作用。這些解決方案都很笨拙且不能保證在任一情況下100%有效,同時,它也要求使用者有一定的操作經驗。

這篇文章以樣本闡述了正確解決使用者退出問題的方案。作者Kevin Le首先描述了一個密碼保護Web應用,然後以樣本程式解釋問題如何產生並討論問題的解決方案。文章雖然是針對JSP頁面進行闡述,但作者所闡述的概念很容易理解切能夠為其他Web技術所採用。最後作者展示了如何用Jakarta Struts優雅地解決這一問題。

大部分Web應用不會包含象銀行賬戶或信用卡資料那樣機密的資訊,但一旦涉及到敏感性資料,我們就需要提供一類密碼保護機制。舉例來說,一個工廠中工人通過Web訪問他們的時間安排、進入他們的訓練課程以及查看他們的薪金等等。此時應用SSL(Secure Socket Layer)有點殺雞用牛刀的感覺,但不可否認,我們又必須為這些應用提供密碼保護,否則,工人(也就是Web應用的使用者)可以窺探到工廠中其他僱員的私人機密資訊。

與上述情形相似的還有位處圖書館、醫院等公用場所的電腦。在這些地方,許多使用者共同使用幾台電腦,此時保護使用者的個人資料就顯得至關重要。設計良好編寫優秀的應用對使用者專業知識的要求少之又少。

我們來看一下現實世界中一個完美的Web應用是如何表現的:一個使用者通過瀏覽器訪問一個頁面。Web應用展現一個登陸頁面要求使用者輸入有效驗證資訊。使用者輸入了使用者名稱和密碼。此時我們假設使用者提供的身分識別驗證資訊是正確的,經過了驗證過程,Web應用允許使用者瀏覽他有權訪問的地區。使用者想退出時,點擊退出按鈕,Web應用要求使用者確認他是否則真的需要退出,如果使用者確定退出,Session結束,Web應用重新置放到登陸頁面。使用者可以放心的離開而不用擔心他的資訊會泄露。另一個使用者坐到了同一台電腦前,他點擊後退按鈕,Web應用不應該出現上一個使用者訪問過的任何一個頁面。事實上,Web應用在第二個使用者提供正確的驗證資訊之前應當一直停留在登陸頁面上。

通過樣本程式,文章向您闡述了如何在一個Web應用中實現這一功能。

JSP樣本

為了更為有效地闡述實現方案,本文將從展示一個樣本應用logoutSampleJSP1中碰到的問題開始。這個樣本代表了許多沒有正確解決退出過程的Web應用。logoutSampleJSP1包含了下述jsp頁面:login.jsp, home.jsp, secure1.jsp, secure2.jsp, logout.jsp, loginAction.jsp, and logoutAction.jsp。其中頁面home.jsp, secure1.jsp, secure2.jsp, 和logout.jsp是不允許未經認證的使用者訪問的,也就是說,這些頁麵包含了重要訊息,在使用者登陸之前或者退出之後都不應該出現在瀏覽器中。login.jsp包含了用於使用者輸入使用者名稱和密碼的form。logout.jsp頁包含了要求使用者確認是否退出的form。loginAction.jsp和logoutAction.jsp作為控制器分別包含了登陸和結束代碼。

第二個樣本應用logoutSampleJSP2展示了如何解決樣本logoutSampleJSP1中的問題。然而,第二個應用自身也是有疑問的。在特定的情況下,退出問題還是會出現。

第三個樣本應用logoutSampleJSP3在第二個樣本上進行了改進,比較完善地解決了退出問題。

最後一個樣本logoutSampleStruts展示了Struts如何優美地解決登陸問題。

注意:本文所附樣本在最新版本的Microsoft Internet Explorer (IE), Netscape Navigator, Mozilla, FireFox和Avant瀏覽器上測試通過。

Login action

Brian Pontarelli的經典文章《J2EE Security: Container Versus Custom》討論了不同的J2EE認證途徑。文章同時指出,HTTP協議和基於form的認證並未提供處理使用者退出的機制。因此,解決途徑便是引入自訂的安全實現機制。

自訂的安全認證機制普遍採用的方法是從form中獲得使用者輸入的認證資訊,然後到諸如LDAP (lightweight directory access protocol)或關聯式資料庫的安全域中進行認證。如果使用者提供的認證資訊是有效,登陸動作往HttpSession對象中注入某個對象。HttpSession存在著注入的對象則表示使用者已經登陸。為了方便讀者理解,本文所附的樣本只往HttpSession中寫入一個使用者名稱以表明使用者已經登陸。清單1是從loginAction.jsp頁面中節選的一段代碼以此闡述登陸動作:

Listing 1
//...
//initialize RequestDispatcher object; set forward to home page by default
RequestDispatcher rd = request.getRequestDispatcher("home.jsp");
//Prepare connection and statement
rs = stmt.executeQuery("select password from USER where userName = '" + userName + "'");
if (rs.next()) {
 //Query only returns 1 record in the result set; only 1
 password per userName which is also the primary key
 if (rs.getString("password").equals(password)) { //If valid password
  session.setAttribute("User", userName); //Saves username string in the session object
 }
 else { //Password does not match, i.e., invalid user password
  request.setAttribute("Error", "Invalid password.");
  rd = request.getRequestDispatcher("login.jsp");
 }
} //No record in the result set, i.e., invalid username
else {
 request.setAttribute("Error", "Invalid user name.");
 rd = request.getRequestDispatcher("login.jsp");
}
}
//As a controller, loginAction.jsp finally either forwards to "login.jsp" or "home.jsp"
rd.forward(request, response);
//...

本文所附樣本均以關係型資料庫作為安全域,但本文所闡述的觀點對任何類型的安全域都是適用的。

Logout action

退出動作就包含了簡單的刪除使用者名稱以及對使用者的HttpSession對象調用invalidate()方法。清單2是從loginoutAction.jsp頁面中節選的一段代碼以此闡述退出動作:

Listing 2
//...
session.removeAttribute("User");
session.invalidate();
//...

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.