本文將介紹在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將失效。