日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[转载]spring security 的 logout 功能

發布時間:2024/9/5 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转载]spring security 的 logout 功能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原文地址:spring?security?的?logout?功能作者:sumnny

轉載自:http://lengyun3566.iteye.com/blog/1114464

理解退出功能

術語退出(Logout)指的是用戶使其安全session失效的一種操作。一般來說,用戶在退出后,將會被重定向到站點的非安全保護的界面。讓我們在站點的頁頭部分添加一個“Log Out”的鏈接,并再次訪問站點以了解其如何實現功能的。

在站點頁頭上添加“Log Out”鏈接

正如我們在第二章中討論的那樣,Spring Security將會監視一些特殊的URL,這些URL將會觸發過濾器鏈中的一個或多個過濾器。用戶實現退出的URL標識為/j_spring_security_logout。在header.jsp中添加一個退出的鏈接與為一個錨標簽(即a標簽)添加適合的href屬性:

?

?

Html代碼?
  • Log Out
  • " quality="high" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer">?
  • <c:url?value="/j_spring_security_logout"?var="logoutUrl"/>??
  • <li><a?href="${logoutUrl}">Log?Out</a></li>??
  • ?

    ?

    如果你重新加載站點并點擊“Log Out”鏈接,你會發現被重置到登錄form的界面。現在看來,登錄和退出是很有趣的!

    【使用JSTL URL標簽來處理相對URL。我們使用了JSTL核心庫中的url標簽來保證提供的URL在部署的web應用中能夠被正確處理。url標簽將提供的URL按照相對路徑(以/開始)進行處理。你可能會見過其他類似的實現技術如使用JSP的代碼((<%= request.getContextPath() %>)),但是JSTL的url標簽能夠使得你免于編寫內聯的代碼。】

    讓我們看一下在這個簡單操作的背后都發生了什么。

    退出是怎么實現的

    當我們點擊退出鏈接時,到底發生了什么?

    需要記住的一點是任何URL請求在被servlet處理之前,都會經過Spring Security的過濾器鏈。所以,/j_spring_security_logout這個URL請求并非對應系統中的一個JSP,也不必有一個真正的JSP或者Spring MVC的目標來對其進行處理。這種類型的URL通常被稱為虛擬URL。

    ?

    請求/j_spring_security_logout的URL被o.s.s.web.authentication.logout.LogoutFilter過濾器所攔截。在Spring Security的眾多默認過濾器中,LogoutFilter專門匹配這個虛擬URL并執行相應的操作。

    ?

    讓我們快速地查看一下Spring Security的security命名空間提供的默認退出功能:

    ?

    Xml代碼? " quality="high" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer">?
  • <http?auto-config="true"?use-expressions="true">??
  • ??<logout?invalidate-session="true"??
  • ??????logout-success-url="/"??
  • ??????logout-url="/j_spring_security_logout"/>??
  • </http>??
  • ??

    ?

    基于這個基本配置,系統將會尋找在logout-url屬性配置的URL并實現用戶的退出。使得用戶退出系統將會涉及如下的三個步驟:

    1.??????使得HTTP session失效(如果invalidate-session屬性被設置為true);

    2.???????清除SecurityContex(真正使得用戶退出);

    3.???????將頁面重定向至logout-success-url指明的URL。

    以下的圖片闡述了退出的過程:



    ?o.s.s.web.authentication.logout.LogoutHandler接口的實現類可以在用戶通過LogoutFilter退出時被調用。你可以實現自己的LogoutHandler(盡管比較復雜)并將其關聯到LogoutFilter的生命周期中。通過LogoutFilter默認設置的LogoutHandler將會清除session以及remember me相關的功能,所以用戶的session中不會再持有認證相關的信息。最后,通過一個o.s.s.web.

    authentication.logout.LogoutSuccessHandler接口的默認實現,頁面得以重定向到一個URL。默認實現中會將頁面重定向到我們配置的成功退出URL地址(默認為/),但是我們自定義任何系統在用戶退出時想要的操作。值得注意的是,退出的處理不應該拋出異常,因為很重要的一點是要在用戶的安全session中避免可能出現的潛在不一致性。所以在實現自己的安全處理時要保證異常被正確的處理和記錄。

    修改logout URL

    讓我們嘗試重寫默認的logout URL來提供一個修改自動設置的簡單例子。我們將會修改logout URL為/logout。

    修改dogstore-security.xml配置文件來包含<logout>元素如下的代碼所示:

    ?

    ?

    Xml代碼? ... .. " quality="high" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer">?
  • <http?auto-config="true"?use-expressions="true">??
  • ...??
  • ..<logout?invalidate-session="true"??
  • ??????logout-success-url="/"??
  • ??????logout-url="/logout"/>??
  • </http>??
  • ?

    ?

    修改/common/header.jsp文件來改變logout鏈接的herf屬性以匹配新的URL:

    ?

    ?

    Html代碼?
    • Log Out
    • " quality="high" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer">?
  • <c:url?value="/logout"?var="logoutUrl"/>??
  • <li><a?href="${logoutUrl}">Log?Out</a></li>??
  • ?

    ?

    重新啟動應用并進行嘗試。你可以發現使用/logout URL取代了/j_spring_security_logout實現用戶的退出。你可能也會發現當你嘗試/j_spring_security_logout這個地址時,你會得到一個Page not Found(404)的錯誤,是因為這個URL不與任何一個實際的servlet資源相對應并且不會被過濾器所處理。

    Logout配置命令

    <logout>元素包含其他的配置指令以實現更復雜的退出功能,介紹如下:

    屬性

    描述

    invalidate-session

    如果被設置為true,用戶的HTTP session將會在退出時被失效。在一些場景下,這是必要的(如用戶擁有一個購物車時)

    logout-success-url

    用戶在退出后將要被重定向到的URL。默認為/。將會通過HttpServletResponse.redirect來處理。

    logout-url

    LogoutFilter要讀取的URL(在例子中,我們改變了它的設置)。

    success-handler-ref

    對一個LogoutSuccessHandler實現的引用。

    ?

    轉載于:https://www.cnblogs.com/kevin443/p/7726970.html

    總結

    以上是生活随笔為你收集整理的[转载]spring security 的 logout 功能的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。