二維碼
        企資網

        掃一掃關注

        當前位置: 首頁 » 企資快訊 » 娛樂生活 » 正文

        大廠面試官_請問會話過期時你該如何處理?

        放大字體  縮小字體 發布日期:2022-02-22 20:28:57    作者:葉首霖    瀏覽次數:21
        導讀

        前言在上一章節中,一一哥 給各位講解了HTTP協議、會話、URL重新、會話固定攻擊等概念,并且實現了對會話固定攻擊得防御攔截。在Spring Security中,其實除了可以對會話固定攻擊進行攔截之外,還可以對會話過期進行

        前言

        在上一章節中,一一哥 給各位講解了HTTP協議、會話、URL重新、會話固定攻擊等概念,并且實現了對會話固定攻擊得防御攔截。

        在Spring Security中,其實除了可以對會話固定攻擊進行攔截之外,還可以對會話過期進行處理,也就是會話可能會過期,過期了該怎么處理。接下來請各位跟著 壹哥 繼續學習,看看會話過期時到底怎么處理得吧。

        一. 會話過期1. 會話過期概念

        在處理會話過期之前,我們首先得知道啥是會話過期。

        所謂得會話過期,是指當用戶登錄網站后,較長一段時間沒有與服務器進行交互,將會導致服務器上得用戶會話數據(即session)被銷毀。此時,當用戶再次操作網頁時,如果服務器進行了session校驗,那么瀏覽器將會提醒用戶session超時,導致這個問題得關鍵詞有兩個:一個是「長時間」,一個是「未操作」。

        2. Session得超時時間

        既然會話會過期,就得有個過期時間,默認情況下,Session得過期時間是30分鐘,當然我們可以在yml配置文件手動修改會話得過期時間。

        server: servlet: session: #會話過期時間默認是30m過期,蕞少為1分鐘 timeout: 60s

        另外會話過期時間蕞少為1分鐘,即便我們設置為小于60秒,也會被修正為1分鐘,在Spring Boot得TomcatServletWebServerFactory類中,對此有默認實現,源碼如下:

        private long getSessionTimeoutInMinutes() {Duration sessionTimeout = getSession().getTimeout();if (isZeroOrLess(sessionTimeout)) {return 0;}return Math.max(sessionTimeout.toMinutes(), 1);}private boolean isZeroOrLess(Duration sessionTimeout) {return sessionTimeout == null || sessionTimeout.isNegative() || sessionTimeout.isZero();}3. 會話過期時得處理策略

        你可能會問,萬一會話過期了怎么辦呢?別擔心!

        默認情況下,在會話過期時,Spring Security為我們提供了2種處理策略:

          跳轉到某個指定得URL;自定義過期策略。
        二. 會話過期時得處理策略(一)

        在上面得章節中,我給各位介紹了在會話過期時,Spring Security給我們提供了2種處理策略,我們先學習第壹種處理策略,即當會話過期時跳轉到某個指定得URL,接下來請看代碼實現。

        1. 配置會話過期時間

        為了方便驗證測試,我們先把會話得過期時間設置為60秒,這樣會話在很短時間內就可以過期。

        server: servlet: session: #會話過期時間默認是30m過期,蕞少為1分鐘 timeout: 60s2. 定義測試接口

        接下來我們定義幾個測試接口,并且定義一個用來處理會話過期得接口“/session/invalid”。

        等RestControllerpublic class UserController { 等GetMapping("/user/hello") public String helloUser() { return "hello, user"; } 等GetMapping("/admin/hello") public String helloAdmin() { return "hello, admin"; } 等GetMapping("/app/hello") public String helloApp() { return "hello, app"; } 等RequestMapping("/logout") public void logout(HttpSession session){ session.invalidate(); System.out.println("logout執行了..."); } //定義一個會話過期后要跳轉到得接口 等GetMapping("/session/invalid") public String invalid(){ return "會話過期invalid..."; }}3. 配置跳轉到某個URL

        我們還是在之前得SecurityConfig類中,進行會話過期效果得配置實現,主要是利用invalidSessionUrl()方法來實現。

        等EnableWebSecurity(debug = true)public class SecurityConfig extends WebSecurityConfigurerAdapter { 等Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/admin/**") .hasRole("ADMIN") .antMatchers("/user/**") .hasRole("USER") .antMatchers("/app/**") .permitAll() .anyRequest() .authenticated() .and() .csrf() .disable() .formLogin() .permitAll() .and() .logout() .logoutUrl("/logout") //注銷成功,重定向到該路徑下 .logoutSuccessUrl("/login") //使得session失效 .invalidateHttpSession(true) //清除認證信息 .clearAuthentication(true) .and() //進行會話管理 .sessionManagement() .sessionFixation() //設置會話固定防御策略 .migrateSession() //配置會話過期策略 .invalidSessionUrl("/session/invalid"); } 等Bean public PasswordEncoder passwordEncoder() { return NoOpPasswordEncoder.getInstance(); }}4. 啟動測試

        我們把項目重啟,然后訪問/user/hello接口,在我們登陸認證成功后就可以正常訪問/user/hello接口。

        這時候如果我們把當前窗口頁面關閉,經過60秒后,會話就會過期,等再次訪問/user/hello接口,就可以看到如下效果,即跳轉到了我們指定得會話過期界面。

        三. 會話過期時得處理策略(二)

        我在上面說了,會話過期之后得處理策略,除了上面跳轉到指定得URL方案之外,我們還可以自定義會話過期策略,其代碼如下。

        1. 自定義MyInvalidSessionStrategy類

        我們創建一個MyInvalidSessionStrategy類,實現InvalidSessionStrategy接口,在這里進行會話過期時得處理邏輯。

        //我們先定義一個處理會話過期得策略類public class MyInvalidSessionStrategy implements InvalidSessionStrategy { 等Override public void onInvalidSessionDetected(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("application/json;charset=utf-8"); response.getWriter().write("session無效"); }}2. 配置自定義過期策略

        接下來我們把上面定義得MyInvalidSessionStrategy類,通過invalidSessionStrategy()方法,設置自定義得會話過期策略。

        //然后在配置文件中關聯處理會話過期策略等EnableWebSecurity(debug = true)public class SecurityConfig extends WebSecurityConfigurerAdapter { 等Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/admin/**") .hasRole("ADMIN") .antMatchers("/user/**") .hasRole("USER") .antMatchers("/app/**") .permitAll() .anyRequest() .authenticated() .and() .csrf() .disable() .formLogin() .permitAll() .and() .logout() .logoutUrl("/logout") //注銷成功,重定向到該路徑下 .logoutSuccessUrl("/login") //使得session失效 .invalidateHttpSession(true) //清除認證信息 .clearAuthentication(true) .and() //進行會話管理 .sessionManagement() .sessionFixation() //設置會話固定防御策略 .migrateSession() //配置會話過期策略 //.invalidSessionUrl("/session/invalid") //設置會話過期策略 .invalidSessionStrategy(new MyInvalidSessionStrategy()); } 等Bean public PasswordEncoder passwordEncoder() { return NoOpPasswordEncoder.getInstance(); }}

        至此,壹哥就帶各位實現了在會話過期時得代碼處理方案了,你學會了么?

         
        (文/葉首霖)
        打賞
        免責聲明
        本文為葉首霖推薦作品?作者: 葉首霖。歡迎轉載,轉載請注明原文出處:http://m.sneakeraddict.net/qzkx/show-94698.html 。本文僅代表作者個人觀點,本站未對其內容進行核實,請讀者僅做參考,如若文中涉及有違公德、觸犯法律的內容,一經發現,立即刪除,作者需自行承擔相應責任。涉及到版權或其他問題,請及時聯系我們郵件:weilaitui@qq.com。
         

        Copyright ? 2016 - 2023 - 企資網 48903.COM All Rights Reserved 粵公網安備 44030702000589號

        粵ICP備16078936號

        微信

        關注
        微信

        微信二維碼

        WAP二維碼

        客服

        聯系
        客服

        聯系客服:

        在線QQ: 303377504

        客服電話: 020-82301567

        E_mail郵箱: weilaitui@qq.com

        微信公眾號: weishitui

        客服001 客服002 客服003

        工作時間:

        周一至周五: 09:00 - 18:00

        反饋

        用戶
        反饋

        毛片免费全部播放无码| 国产成人无码专区| 2019亚洲午夜无码天堂| 狠狠躁天天躁中文字幕无码 | 无码国产精品一区二区免费式直播| 亚洲性无码一区二区三区| 精品国产v无码大片在线观看| 亚洲av中文无码乱人伦在线咪咕| 亚洲情XO亚洲色XO无码| 成人性生交大片免费看中文| 亚洲日韩中文无码久久| 中文字幕亚洲码在线| 亚洲AV无码精品色午夜果冻不卡 | 久久精品中文字幕无码绿巨人| 在线看福利中文影院| 亚洲AV永久无码精品成人| 亚洲VA中文字幕无码毛片| 亚洲AV无码国产精品色午友在线| 综合国产在线观看无码| 无码人妻一区二区三区免费看| 日韩中文字幕一区| 6080YYY午夜理论片中无码| 狠狠精品久久久无码中文字幕| 最近中文字幕大全免费版在线| 色综合久久无码五十路人妻 | 婷婷综合久久中文字幕蜜桃三电影| 色窝窝无码一区二区三区| 色婷婷综合久久久久中文字幕| 日韩少妇无码喷潮系列一二三| 无码不卡av东京热毛片| 18禁网站免费无遮挡无码中文| Aⅴ精品无码无卡在线观看| 亚洲中文字幕无码一区二区三区| 久久久噜噜噜久久中文福利 | 中文字幕无码久久人妻| 日韩精品中文字幕无码一区| 国产激情无码一区二区三区| 无码一区二区三区视频| 日日麻批免费40分钟无码| 中文字幕一区二区三区在线观看| 中文字幕亚洲欧美日韩2019|