SpringSecurity退出功能實現的正確方式

  本文將介紹在Spring Security框架下如何實現用戶的退出logout的功能。其實這是一個很是簡單的功能,我見過不少的程序員在使用了Spring Security以後,仍然去本身寫controller方法實現logout功能,這種作法就好像耕地,你有機械設備你不用,你非要用牛。html

  1、logout最簡及最佳實踐程序員

  其實使用Spring Security進行logout很是簡單,只須要在spring Security配置類配置項上加上這樣一行代碼:http.logout()。關於spring Security配置類的其餘不少實現、如:HttpBasic模式、formLogin模式、自定義登陸驗證結果、使用權限表達式、session會話管理,在本號的以前的文章已經都寫過了。本節的核心內容就是在原有配置的基礎上,加上這樣一行代碼:http.logout()。spring

  加上logout配置以後,在你的「退出」按鈕上使用/logtou做爲請求登出的路徑。cookie

  退出session

  logout功能咱們就完成了。實際上的核心代碼只有兩行。框架

  2、默認的logout作了什麼?ide

  雖然咱們簡簡單單的實現了logout功能,是否是還不足夠放心?咱們下面就來看一下Spring Security默認在logout過程當中幫咱們作了哪些動做。url

  當前session失效,即:logout的核心需求,session失效就是訪問權限的回收。spa

  刪除當前用戶的 remember-me「記住我」功能信息orm

  clear清除當前的 SecurityContext

  重定向到登陸頁面,loginPage配置項指定的頁面

  一般對於一個應用來說,以上動做就是logout功能所須要具有的功能了。

  3、個性化配置

  雖然Spring Security默認使用了/logout做爲退出處理請求路徑,登陸頁面做爲退出以後的跳轉頁面。這符合絕大多數的應用的開發邏輯,但有的時候咱們須要一些個性化設置,以下:

  經過指定logoutUrl配置改變退出請求的默認路徑,固然html退出按鈕的請求url也要修改

  經過指定logoutSuccessUrl配置,來顯式指定退出以後的跳轉頁面

  還可使用deleteCookies刪除指定的cookie,參數爲cookie的名稱

  4、LogoutSuccessHandler

  若是上面的個性化配置,仍然知足不了您的應用需求。可能您的應用須要在logout的時候,作一些特殊動做,好比登陸時長計算,清理業務相關的數據等等。你能夠經過實現LogoutSuccessHandler 接口來實現你的業務邏輯。

  而後進行配置使其生效,核心代碼就是一行logoutSuccessHandler。注意logoutSuccessUrl不要與logoutSuccessHandler一塊兒使用,不然logoutSuccessHandler將失效。

相關文章
相關標籤/搜索