Spring Security實現記住我功能的實戰指南

在現代Web應用中,"記住我"功能是提升用戶體驗的重要特性之一。用戶無需在每次訪問時重新登錄,這不僅方便,還能增強用戶對應用的粘性。今天,我們將通過一個具體的實例,詳細探討如何在Spring Security中實現"記住我"功能。
一、"記住我"功能的實現原理
Spring Security通過RememberMeServices接口實現"記住我"功能。該接口有兩種實現方式:
TokenBasedRememberMeServices:基于Base-64編碼的Cookie實現,簡單易用,但安全性較低。
PersistentTokenBasedRememberMeServices:基于持久化Token的方式,需要使用數據庫表存儲Token信息,安全性更高。
在本例中,我們將使用第一種方式——TokenBasedRememberMeServices,來實現"記住我"功能。
二、實現步驟

  1. 配置Spring Security
    首先,我們需要在Spring Security的配置類中啟用"記住我"功能。以下是具體的Java配置代碼:
    java復制
    @Configuration
    @EnableWebSecurity
    @EnableWebMvc
    @ComponentScan
    public class AppConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
    .anyRequest().authenticated()
    .and()
    .formLogin()
    .and()
    .rememberMe()
    .rememberMeCookieName(“example-app-remember-me”) // 自定義Cookie名稱
    .tokenValiditySeconds(24 * 60 * 60); // 設置Token有效期為1天
    }

    @Override
    public void configure(AuthenticationManagerBuilder builder) throws Exception {
    builder.inMemoryAuthentication()
    .withUser(“joe”)
    .password(“123”)
    .roles(“ADMIN”);
    }

    @Bean
    public ViewResolver viewResolver() {
    InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
    viewResolver.setPrefix(“/WEB-INF/views/”);
    viewResolver.setSuffix(“.jsp”);
    return viewResolver;
    }
    }
    在上述配置中,rememberMe()方法默認會注冊TokenBasedRememberMeServices。如果不指定Cookie名稱和過期時間,Spring Security會默認使用名稱為remember-me的Cookie,并設置其有效期為兩周。

  2. 創建控制器
    接下來,我們需要創建一個簡單的控制器,用于處理用戶的請求。以下是控制器的代碼:
    java復制
    @Controller
    public class ExampleController {
    @RequestMapping(“/”)
    public String handleRequest(ModelMap map) {
    map.addAttribute(“time”, LocalDateTime.now().toString());
    return “my-page”;
    }
    }

  3. 創建登錄后的頁面
    在src/main/webapp/WEB-INF/views/目錄下,創建一個名為my-page.jsp的JSP頁面,用于展示登錄后的信息:
    HTML復制

Spring Security Example

Time: ${time}

4. 運行項目 為了運行項目,我們需要配置好Maven和Tomcat。在項目的pom.xml文件中,添加以下依賴: xml復制 org.springframework.security spring-security-web 5.0.0.RELEASE org.springframework.security spring-security-config 5.0.0.RELEASE org.springframework spring-webmvc 4.3.9.RELEASE javax.servlet javax.servlet-api 3.1.0 provided 完成依賴配置后,運行以下命令啟動項目: bash復制 mvn tomcat7:run-war 三、測試結果 在瀏覽器中訪問項目地址,登錄時勾選"記住我"選項。登錄成功后,即使當前HTTP會話過期,服務器也會根據Cookie中的Token信息自動登錄用戶,直到Cookie過期。 通過Chrome開發者工具查看Cookie,可以看到名為example-app-remember-me的Cookie,其有效期為1天。 四、總結 通過上述步驟,我們成功實現了Spring Security中的"記住我"功能。雖然TokenBasedRememberMeServices的實現方式簡單,但其安全性相對較低。在實際項目中,如果需要更高的安全性,可以考慮使用PersistentTokenBasedRememberMeServices,并通過數據庫持久化Token信息。 希望本文能幫助你更好地理解和實現Spring Security中的"記住我"功能。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/70367.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/70367.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/70367.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

用命令模式設計一個JSBridge用于JavaScript與Android交互通信

用命令模式設計一個JSBridge用于JavaScript與Android交互通信 在開發APP的過程中,通常會遇到Android需要與H5頁面互相傳遞數據的情況,而Android與H5交互的容器就是WebView。 因此要想設計一個高可用的 J S B r i d g e JSBridge JSBridge,不…

ModuleNotFoundError: No module named ‘timm.optim.novogr兩種解決方法

運行報錯 from timm.optim.novograd import NovoGradModuleNotFoundError: No module named ‘timm.optim.novograd’。 問題原因 timm版本過高,novograd函數已被拋棄。 解決辦法 方法1:安裝更低版本的timm pip install timm0.4.12方法2&#xff1a…

DeepSeek 本地部署指南:從零開始搭建 AI 搜索工具

1. 引言 背景介紹 DeepSeek 是一款基于 AI 的搜索工具,能夠高效處理海量數據,提供精準的搜索結果。它結合了 Ollama 的模型管理能力,使得部署更加便捷。 為什么選擇本地部署 本地部署可以確保數據隱私,避免云端傳輸的風險&…

昇騰DeepSeek模型部署優秀實踐及FAQ

2024年12月26日,DeepSeek-V3橫空出世,以其卓越性能備受矚目。該模型發布即支持昇騰,用戶可在昇騰硬件和MindIE推理引擎上實現高效推理,但在實際操作中,部署流程與常見問題困擾著不少開發者。本文將為你詳細闡述昇騰 De…

vscode復制到下一行

linux中默認快捷鍵是ctrl shift alt down/up 但是在vscode中無法使用,應該是被其他的東西綁定了,經測試,可以使用windows下的快捷鍵shift alt down/up { “key”: “shiftaltdown”, “command”: “editor.action.copyLinesDownAction”…

網絡爬蟲學習:借助DeepSeek完善爬蟲軟件,實現模擬鼠標右鍵點擊,將鏈接另存為本地文件

一、前言 最近幾個月里,我一直在學習網絡爬蟲方面的知識,每有收獲都會將所得整理成文發布,不知不覺已經發了7篇日志了: 網絡爬蟲學習:從百度搜索結果抓取標題、鏈接、內容,并保存到xlsx文件中 網絡爬蟲學…

Arduino 第十六章:pir紅外人體傳感器練習

Arduino 第十六章:PIR 傳感器練習 一、引言 在 Arduino 的眾多有趣項目中,傳感器的應用是非常重要的一部分。今天我們要學習的主角是 PIR(被動紅外)傳感器。PIR 傳感器能夠檢測人體發出的紅外線,常用于安防系統、自動…

CV -- YOLOv8 圖像分割(GPU環境)

目錄 參考視頻: 標注 JSON轉為TXT 訓練 驗證 參考視頻: 使用 Yolov8 自定義數據集進行圖像分割_嗶哩嗶哩_bilibili 標注 數據集: 我使用的是一些蘋果數據集,可以在我的csdn資源中下載: https://download.csdn.net/do…

深入理解 lua_KFunction 和 lua_CFunction

在 Lua C API 中,lua_KFunction 和 lua_CFunction 是兩個核心概念,尤其在處理協程和 C 函數擴展時扮演著至關重要的角色。lua_CFunction 作為一種 C 函數類型,允許開發者將 C 函數注冊到 Lua 環境中,使得這些 C 函數可以在 Lua 腳本中被調用,進而實現 Lua 的功能擴展。而 …

基于微信小程序的電影院訂票選座系統的設計與實現,SSM+Vue+畢業論文+開題報告+任務書+指導搭建視頻

本系統包含用戶、管理員兩個角色。 用戶角色:注冊登錄、查看首頁電影信息推薦、查看電影詳情并進行收藏預定、查看電影資訊、在線客服、管理個人訂單等。 管理員角色:登錄后臺、管理電影類型、管理放映廳信息、管理電影信息、管理用戶信息、管理訂單等。…

【Linux網絡編程】應用層協議HTTP(請求方法,狀態碼,重定向,cookie,session)

🎁個人主頁:我們的五年 🔍系列專欄:Linux網絡編程 🌷追光的人,終會萬丈光芒 🎉歡迎大家點贊👍評論📝收藏?文章 ? Linux網絡編程筆記: https://blog.cs…

Vue3 打造 Windows 桌面個性高效組件工具

軟件介紹 Widgets 這款基于 Vue3 構建的開源 Windows 桌面小部件工具超實用。 其多樣化組件庫涵蓋超 20 種,從倒計時、打工進度等實用工具,到抖音熱榜等實時資訊組件應有盡有,各組件獨立運行,滿足多場景需求。 高度自定義布局支持…

Tailwind CSS 和 UnoCSS簡單比較

一、Tailwind CSS 和 UnoCSS簡介 Tailwind CSS 和 UnoCSS 都是流行的原子化 CSS 框架,它們有很多相似之處,但也存在一些明顯的區別,以下從多個方面對它們進行比較: 1. 基本概念和原理 Tailwind CSS 是最早提出并推動原子化 CSS…

什么是語料清洗、預訓練、指令微調、強化學習、內容安全; 什么是megatron,deepspeed,vllm推理加速框架

什么是語料清洗、預訓練、指令微調、強化學習、內容安全 目錄 什么是語料清洗、預訓練、指令微調、強化學習、內容安全語料清洗預訓練指令微調強化學習內容安全什么是megatron,deepspeed,vllm推理加速框架語料清洗 語料清洗是對原始文本數據進行處理的過程,旨在去除數據中的…

C++(23):lambda可以省略()

C越來越多的使用了lambda&#xff0c;C23也進一步的放寬了對lambda的限制&#xff0c;這一次&#xff0c;如果lambda沒有參數列表&#xff0c;那么可以直接省略掉()&#xff1a; #include <iostream> using namespace std;void func() {auto f []{cout<<"in…

自制操作系統分享第四天

今天要做什么&#xff1f; &#xff08;1&#xff09;分享 我們上面已經說過INT 0x13這種指令&#xff08;調用BIOS的INT指令&#xff09;&#xff0c;我們知道這是調用BIOS的0x13函數&#xff0c;但還不明白它到底是干什么用的&#xff1a; AH 0x02;# 讀盤 AH 0x03;# 寫…

DeepSeek預測25考研分數線

25考研分數馬上要出了。 目前&#xff0c;多所大學已經陸續給出了分數查分時間&#xff0c;綜合往年情況來看&#xff0c;每年的查分時間一般集中在2月底。 等待出成績的日子&#xff0c;學子們的心情是萬分焦急&#xff0c;小編用最近爆火的“活人感”十足的DeepSeek幫大家預…

Android 動態加入Activity 時 manifest 注冊報錯解決。使用manifestPlaceholders 占位

需求如下&#xff1a; 項目 測試demo 有多個渠道&#xff0c;部分渠道包含支付功能&#xff0c;在主測試代碼外&#xff0c;需要一個單獨 Activity 調用測試代碼。 MainActivityPayActivity渠道A包含不包含渠道B包含包含 因為支付功能需要引入對應的 moudule&#xff0c;因此…

FRRouting配置與OSPF介紹,配置,命令,bfd算法:

文章目錄 1、frrouting的配置&#xff1a;2、ospf2.1、檢測和維護鄰居關系2.2、ospfDR和BDR2.3、odpf鄰居表2.4、ospf常用命令2.5、bfd配置 1、frrouting的配置&#xff1a; sudo service zebra start sudo service ospfd start telnet localhost 2604 en configure termina…

Perplexity 開源DeepSeek-R1 模型新版本 R1-1776

引言 在人工智能領域&#xff0c;模型的更新迭代如同科技界的時尚潮流&#xff0c;不斷推陳出新。今天&#xff0c;我們要介紹的是Perplexity AI開源的新版推理模型——DeepSeek-R1 1776。這個版本不僅繼承了前代的強大性能&#xff0c;還在公正性和準確性上進行了顯著提升。那…