成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

這是一種有關記住我功能的新實現方式

數據庫 Redis
本文給大家講解了在使用 spring-session-redis 的項目中,如何通過延長用戶 session 的有效期來達到記住我功能的一致效果。

在傳統的前后端不分離項目中,大家在登錄界面應該經常能看到記住我這個功能,這個功能本質上是為了讓用戶能在一段較長時間內不再重復登錄,在以前的實現方案中,大家多使用 cookie 實現,本文給大家介紹在引入了 spring-session-redis 的項目中,使用一種新的實現方式,直接設置 redis 中用戶 session 的有效期來實現。

本文使用 newbeepro 項目作為示例,給大家演示記住我功能的具體實現。項目地址:https://github.com/wayn111/newbee-mall-pro

本文大綱如下,

圖片圖片

1. spring-session 的 yml 配置

圖片圖片

在使用 spring-session 后,我們可以在 spring 的 yml 文件中設置 session 在 redis 中的 key 前綴,在 newbeepro 項目中,我們設置為 newbee_mall,然后我們設置過期時間 3600 秒,也就是一小時。

2. spring-session 的默認序列化方式

@Configuration
public class CacheConfig implements CachingConfigurer {
    /**
     * 指定spring-session的默認序列化方式
     *
     * @return RedisSerializer
     */
    @Bean("springSessionDefaultRedisSerializer")
    public RedisSerializer<Object> redisSerializer() {
        return valueSerializer();
    }
    private RedisSerializer<Object> valueSerializer() {
        return new GenericFastJsonRedisSerializer();
    }
}

添加 RedisSerializer 類的 bean 實例,并且設置 bean 名稱是 springSessionDefaultRedisSerializer。注意 bean 名稱必須是 springSessionDefaultRedisSerializer。

這一步不是必須的,作用是可以設置 spring-session-redis 的默認序列化實現。當我們設置為 fastjson 的序列化方式時,就可以讓我們方便查看 redis 客戶端。

3. 打開登錄頁面

圖片圖片

當用戶打開 newbeepro 項目前端頁面時,用戶 session 就已經在 redis 中保存了下來,這一點我們通過查看 redis 客戶端發現,此時用戶的 session 信息已經存在,并且有效期是 3600 秒與我們 yml 配置的過期時間是一致的。

圖片圖片

4. 后端登錄接口如何實現記住我

@ResponseBody
@PostMapping("/login")
public R doLogin(MallUserVO mallUserVO,
                 @RequestParam("destPath") String destPath,
                 HttpSession session) {
    R success = R.success();
    MallUser user = mallUserService.getOne(Wrappers.<MallUser>lambdaQuery()
            .eq(MallUser::getLoginName, mallUserVO.getLoginName())
            .eq(MallUser::getPasswordMd5, Md5Utils.hash(mallUserVO.getPassword())));
    if (user == null) {
        return R.error("賬戶名稱或者密碼錯誤");
    }
    if (user.getLockedFlag() == 1) {
        return R.error("該賬戶已被禁用");
    }
    BeanUtils.copyProperties(user, mallUserVO);
    session.setAttribute(Constants.MALL_USER_SESSION_KEY, mallUserVO);
    String namespace = environment.getProperty("spring.session.redis.namespace");
    String sessionKey = namespace + ":sessions:" + session.getId()
    int timeout = Integer.parseInt(environment.getProperty("spring.session.timeout"));
    if (mallUserVO.isRememberme()) {
        redisCache.setCacheMapValue(sessionKey, "maxInactiveInterval", timeout * 24 * 7);
    } else {
        redisCache.setCacheMapValue(sessionKey, "maxInactiveInterval", timeout);
    }
    if (StringUtils.isNotEmpty(destPath) && StringUtils.contains(destPath, "=")) {
        success.add("destPath", destPath.split("=")[1].substring(1));
    }
    return success;
}

在登錄接口中,我們可以通過 mallUserVO.isRememberme() 方法來判斷用戶是否點擊了記住我按鈕,在前面的第三步中,我們可以看到用戶的 session 在 redis 中 的 key 名稱是 newbee_mall:sessions:c3fd288e-c9c2-47e6-961b-a5e1e0a3205e。

這里給大家講解一下這個 key 的拼接邏輯。

圖片圖片

OK,根據這個拼接邏輯,我們拼接 session key 的實現代碼就是,

String namespace = environment.getProperty("spring.session.redis.namespace");
String sessionKey = namespace + ":sessions:" + session.getId()

然后大家在用戶 session key 的 hash 內容里可以發現有一個 hashKey 名稱是 maxInactiveInterval,它就是用戶 session 的有效期屬性,我們可以通過改變 maxInactiveInterval 的屬性值來延長用戶 session 的有效期,以此來實現記住我功能。

圖片圖片

那我們就可以通過 redisCache 實例來直接設置用戶 session 的有效期,代碼如下,

redisCache.setCacheMapValue(sessionKey, "maxInactiveInterval", timeout * 24 * 7)

5. 登錄成功

當用戶勾選了記住我按鈕,登錄成功后,我們來看下 redis 客戶端,

圖片圖片

OK,大功告成。

總結一下

本文給大家講解了在使用 spring-session-redis 的項目中,如何通過延長用戶 session 的有效期來達到記住我功能的一致效果。

大家在學習本文后,也可以把記住我功能應用到自己的項目中,本文實例代碼都在 newbeepro 項目中可以找到。

責任編輯:武曉燕 來源: 程序員wayn
相關推薦

2016-07-29 00:43:22

數據驅動

2022-07-28 11:29:23

數據安全數據令牌化

2020-12-16 10:12:52

大數據小數據人工智能

2016-12-23 14:58:58

容器WebSocketDocker Remo

2013-05-14 15:08:02

2016-12-23 21:11:05

深度學習思維方式大數據

2013-08-26 13:58:20

2018-12-14 14:30:12

安全檢測布式系測試

2018-07-18 08:59:32

Redis存儲模式

2020-09-09 10:44:35

5G網絡運營方式

2020-09-09 10:44:32

5G

2012-12-07 09:30:24

2022-08-18 09:38:02

Spring跨域

2017-06-20 11:28:16

2023-04-24 08:39:01

閱讀源碼方式

2010-11-05 10:15:42

云計算

2022-08-08 08:22:22

量子計算

2022-06-23 07:05:46

跳板機服務器PAM

2009-12-17 10:02:51

2023-01-26 23:46:15

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产成人精品a视频一区www | 在线免费看黄 | 久久国产一区二区 | 日韩电影中文字幕 | 亚洲精品乱码久久久久久黑人 | 999久久久免费精品国产 | 亚洲精彩视频在线观看 | 日韩一区二区三区在线播放 | 国产一区二区三区视频 | 自拍偷拍在线视频 | 久久不卡日韩美女 | 91精品国产91久久久久久三级 | 一区二区在线观看免费视频 | 精品国产成人 | 青青草一区二区 | 国产精品一区二区久久久久 | 婷婷中文在线 | 色偷偷噜噜噜亚洲男人 | 日韩视频在线一区 | 99免费视频| 视频一区二区在线观看 | 欧美h版 | 国产精品国产精品 | 亚洲一区二区久久 | 免费在线观看毛片 | 天天久| 爱爱免费视频 | 精品国产伦一区二区三区观看体验 | 国产97在线 | 日韩 | 99精品国产一区二区青青牛奶 | 久久综合av | 久草青青 | 久视频在线 | 成人一区二区视频 | www视频在线观看 | 成人欧美一区二区三区在线播放 | 国产精品123区 | 免费同性女女aaa免费网站 | 一区二区精品 | 国产精品一区二区免费看 | 国产精品久久久久久久免费大片 |