最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis實(shí)現(xiàn)單設(shè)備登錄的場景分析

 更新時(shí)間:2022年04月19日 11:08:19   作者:等待花開I  
這篇文章主要介紹了Redis實(shí)現(xiàn)單設(shè)備登錄,用戶首次登錄時(shí),將用戶信息存入Redis,key是用戶id,value是token,當(dāng)用戶在其他設(shè)備登錄時(shí),會(huì)重新生成token,這個(gè)時(shí)候原先的token已經(jīng)被覆蓋了,本文給大家提供樣例及核心代碼,感興趣的朋友參考下吧

在有些場景下,我們希望用戶一個(gè)賬號(hào)只能登錄一個(gè)設(shè)備。

這個(gè)時(shí)候我們可以用Redis來實(shí)現(xiàn)。

原理: 用戶首次登錄時(shí),將用戶信息存入Redis,key是用戶id,value是token。當(dāng)用戶在其他設(shè)備登錄時(shí),會(huì)重新生成token,這個(gè)時(shí)候原先的token已經(jīng)被覆蓋了。所以用戶在訪問需要登錄賬號(hào)的操作時(shí),系統(tǒng)會(huì)攔截請(qǐng)求判斷token是否存在。當(dāng)然是不存在的,所以我們就實(shí)現(xiàn)了單個(gè)設(shè)備登錄的需求。

這里只提供大概的樣例。

用戶登錄

@PostMapping("login")
@ApiOperation(value = "用戶登錄",notes = "用戶登錄")
public GraceJSONResult login(@RequestParam String userId,HttpServletRequest request) throws Exception {
    String uToken = UUID.randomUUID().toString();
    //把token存入redis
    redis.set("redis_user_token"+":"+userId,uToken);
    //返回用戶信息,包含token
    return GraceJSONResult.ok(usersVO);
}

攔截器

攔截哪些操作需要用戶登錄,在攔截器中實(shí)現(xiàn)單設(shè)備登錄。

說明:BaseInfoProperties是共有的代碼,集成這個(gè)類就可以直接使用reidis。

public class BaseInfoProperties {
    @Autowired
    public RedisOperator redis;
}

說明:GraceException是自定義的拋出異常的類,這里不做展示。

public class UserTokenInterceptor extends BaseInfoProperties implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String userId = request.getHeader("headerUserId");
        String userToken = request.getHeader("headerUserToken");
        // 判斷用戶id和token是否為空
        if(StringUtils.isNotBlank(userId) && StringUtils.isNotBlank(userToken)){
            String redisToken=redis.get(REDIS_USER_TOKEN+":"+userId);
            //判斷token是否失效
            if(StringUtils.isBlank(redisToken)){
                GraceException.display(ResponseStatusEnum.UN_LOGIN);
                return false;
            }else {
                //判斷token是否一致,如果不一致,表示用戶在別的手機(jī)端登錄,token被覆蓋了
                if(!redisToken.equalsIgnoreCase(redisToken)){
                    GraceException.display(ResponseStatusEnum.TICKET_INVALID);
                    return false;
                }
            }
        }else {
            // 用戶id和token為空
            GraceException.display(ResponseStatusEnum.UN_LOGIN);
            return false;
        }

        return true;
    }
}

注冊(cè)攔截器

@Configuration
public class InterceptorConfig implements WebMvcConfigurer{
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //要攔截的請(qǐng)求,哪些需要登錄
        registry.addInterceptor(userTokenInterceptor())
                .addPathPatterns("/userInfo/modifyUserInfo")
                .addPathPatterns("/userInfo/modifyImage");
    }
    //用戶未登錄攔截器
    @Bean
    public UserTokenInterceptor userTokenInterceptor() {
       return  new UserTokenInterceptor();
    }
}

到此這篇關(guān)于Redis實(shí)現(xiàn)單設(shè)備登錄的文章就介紹到這了,更多相關(guān)redis單設(shè)備登錄內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 為什么斷電后Redis數(shù)據(jù)不會(huì)丟失

    為什么斷電后Redis數(shù)據(jù)不會(huì)丟失

    Redis 作為一款內(nèi)存數(shù)據(jù)庫,被廣泛使用于緩存,分布式鎖等場景,那么假如斷電或者因其他因素導(dǎo)致 Reids 服務(wù)宕機(jī),在重啟之后數(shù)據(jù)會(huì)丟失嗎?本文就來介紹與一下
    2021-08-08
  • Redis Sorted Set 跳表的實(shí)現(xiàn)示例

    Redis Sorted Set 跳表的實(shí)現(xiàn)示例

    本文詳細(xì)解析了Redis中SortedSet跳表的實(shí)現(xiàn)原理,闡述了跳表的基本概念、結(jié)構(gòu)及其在SortedSet中的應(yīng)用,同時(shí)也指出了跳表在實(shí)際使用中的優(yōu)勢和局限,可以更好地運(yùn)用Redis的SortedSet,優(yōu)化高并發(fā)環(huán)境中的數(shù)據(jù)查詢與操作,感興趣的可以了解一下
    2024-10-10
  • 如何使用Redis保存用戶會(huì)話Session詳解

    如何使用Redis保存用戶會(huì)話Session詳解

    這篇文章主要給大家介紹了關(guān)于如何使用Redis保存用戶會(huì)話Session的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • Redis高效查詢大數(shù)據(jù)的實(shí)踐與優(yōu)化詳細(xì)指南

    Redis高效查詢大數(shù)據(jù)的實(shí)踐與優(yōu)化詳細(xì)指南

    Redis 是一種高性能的鍵值存儲(chǔ)數(shù)據(jù)庫,廣泛應(yīng)用于緩存,排行榜,計(jì)數(shù)器等場景,本文將圍繞如何高效查詢Redis中滿足條件的數(shù)據(jù)展開討論,感興趣的小伙伴可以了解下
    2025-04-04
  • Redis核心原理詳細(xì)解說

    Redis核心原理詳細(xì)解說

    這篇文章主要介紹了Redis核心原理詳細(xì)解說,redis利用epoll實(shí)現(xiàn)IO多路復(fù)用,將連接信息和事件放到隊(duì)列中,依次放到文件事件分派器,事件分派器將事件分發(fā)給事件處理器
    2022-07-07
  • Redis數(shù)據(jù)備份與恢復(fù)方式的五種方式

    Redis數(shù)據(jù)備份與恢復(fù)方式的五種方式

    本文主要介紹了Redis數(shù)據(jù)備份與恢復(fù)方式,包含了五種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • Redis?SortedSet數(shù)據(jù)類型及其常用命令總結(jié)

    Redis?SortedSet數(shù)據(jù)類型及其常用命令總結(jié)

    Redis的SortedSet是一個(gè)可排序的set集合,與Java中的TreeSet有些類似,但底層數(shù)據(jù)結(jié)構(gòu)卻差別很大,這篇文章主要介紹了Redis?SortedSet數(shù)據(jù)類型及其常用命令詳解,需要的朋友可以參考下
    2024-06-06
  • Redis基本數(shù)據(jù)類型Zset有序集合常用操作

    Redis基本數(shù)據(jù)類型Zset有序集合常用操作

    這篇文章主要為大家介紹了redis基本數(shù)據(jù)類型Zset有序集合常用操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • 基于Redis實(shí)現(xiàn)分布式鎖的方法(lua腳本版)

    基于Redis實(shí)現(xiàn)分布式鎖的方法(lua腳本版)

    這篇文章主要介紹了基于Redis實(shí)現(xiàn)分布式鎖的方法(lua腳本版),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-05-05
  • Redis解決跨域存取Session問題

    Redis解決跨域存取Session問題

    本文主要介紹了Redis解決跨域存取Session問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04

最新評(píng)論

灵山县| 离岛区| 郁南县| 新丰县| 三穗县| 祥云县| 屯留县| 会昌县| 三台县| 华容县| 永昌县| 合水县| 彩票| 阿克苏市| 汽车| 天长市| 潮安县| 进贤县| 侯马市| 开原市| 宁陕县| 普安县| 吉水县| 固原市| 长武县| 富阳市| 乌审旗| 肇庆市| 景宁| 石城县| 米泉市| 石屏县| 清苑县| 镇宁| 蒙城县| 巧家县| 南皮县| 蚌埠市| 黔西| 镶黄旗| 蓬莱市|