您好,登錄后才能下訂單哦!
使用SpringSecurity怎么實現一個退出功能?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
一、logout最簡及最佳實踐
其實使用Spring Security進行logout非常簡單,只需要在spring Security配置類配置項上加上這樣一行代碼:http.logout()。關于spring Security配置類的其他很多實現、如:HttpBasic模式、formLogin模式、自定義登錄驗證結果、使用權限表達式、session會話管理,在本號的之前的文章已經都寫過了。本節的核心內容就是在原有配置的基礎上,加上這樣一行代碼:http.logout()。
@Configuration @EnableWebSecurity public class SecSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(final HttpSecurity http) throws Exception { http.logout(); } }
加上logout配置之后,在你的“退出”按鈕上使用/logtou作為請求登出的路徑。
<a href="/logout" rel="external nofollow" >退出</a>
logout功能我們就完成了。實際上的核心代碼只有兩行。
二、默認的logout做了什么?
雖然我們簡簡單單的實現了logout功能,是不是還不足夠放心?我們下面就來看一下Spring Security默認在logout過程中幫我們做了哪些動作。
當前session失效,即:logout的核心需求,session失效就是訪問權限的回收。
刪除當前用戶的 remember-me“記住我”功能信息
clear清除當前的 SecurityContext
重定向到登錄頁面,loginPage配置項指定的頁面
通常對于一個應用來講,以上動作就是logout功能所需要具備的功能了。
三、個性化配置
雖然Spring Security默認使用了/logout作為退出處理請求路徑,登錄頁面作為退出之后的跳轉頁面。這符合絕大多數的應用的開發邏輯,但有的時候我們需要一些個性化設置,如下:
http.logout() .logoutUrl("/signout") .logoutSuccessUrl("/aftersignout.html") .deleteCookies("JSESSIONID")
通過指定logoutUrl配置改變退出請求的默認路徑,當然html退出按鈕的請求url也要修改
通過指定logoutSuccessUrl配置,來顯式指定退出之后的跳轉頁面
還可以使用deleteCookies刪除指定的cookie,參數為cookie的名稱
四、LogoutSuccessHandler
如果上面的個性化配置,仍然滿足不了您的應用需求。可能您的應用需要在logout的時候,做一些特殊動作,比如登錄時長計算,清理業務相關的數據等等。你可以通過實現LogoutSuccessHandler 接口來實現你的業務邏輯。
@Component public class MyLogoutSuccessHandler implements LogoutSuccessHandler { @Override public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { //這里書寫你自己的退出業務邏輯 // 重定向到登錄頁 response.sendRedirect("/login.html"); } }
然后進行配置使其生效,核心代碼就是一行logoutSuccessHandler。注意logoutSuccessUrl不要與logoutSuccessHandler一起使用,否則logoutSuccessHandler將失效。
@Configuration @EnableWebSecurity public class SecSecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private MyLogoutSuccessHandler myLogoutSuccessHandler; @Override protected void configure(final HttpSecurity http) throws Exception { http.logout() .logoutUrl("/signout") //.logoutSuccessUrl(``"/aftersignout.html"``) .deleteCookies("JSESSIONID") //自定義logoutSuccessHandler .logoutSuccessHandler(myLogoutSuccessHandler); } }
關于使用SpringSecurity怎么實現一個退出功能問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。