LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

如何實(shí)現(xiàn)Web網(wǎng)站的用戶自動(dòng)登錄功能

admin
2025年1月22日 12:12 本文熱度 119

    在軟件使用上,用戶體驗(yàn)是一個(gè)重要的考慮因素,所以為了提高用戶的體驗(yàn),很多的應(yīng)用系統(tǒng)中都會(huì)有自動(dòng)登錄功能,如下所示的自動(dòng)登錄的圖:

?

    自動(dòng)登錄其實(shí)是在用戶第一次成功登錄后,應(yīng)用系統(tǒng)將用戶的登錄狀態(tài)持久化,等用戶下次再訪問時(shí)實(shí)現(xiàn)自動(dòng)登錄,這樣就不需用戶再次輸入用戶名和密碼。那么自動(dòng)登錄如何實(shí)現(xiàn)呢,下面介紹通過Cookie+Token的方式實(shí)現(xiàn)自動(dòng)登錄的功能。

1、Cookie+Token實(shí)現(xiàn)方案

    用戶勾選“自動(dòng)登錄”選項(xiàng)后進(jìn)行登錄時(shí),服務(wù)端驗(yàn)證用戶信息通過之后生成一個(gè)Token,然后服務(wù)端將Token寫到Cookie上并存留一段時(shí)間,用戶下次重新打開瀏覽器,瀏覽器會(huì)自動(dòng)登錄,如下自動(dòng)登錄的流程圖:

(1)當(dāng)用戶第一次登錄系統(tǒng)的時(shí)候,用戶輸入用戶名和密碼進(jìn)行登錄,驗(yàn)證賬號(hào)與密碼通過之后,服務(wù)端生成Token,如下圖所示:

    服務(wù)端將生成的Token緩存一份到Redis上,然后將Token和用戶信息更新到數(shù)據(jù)庫中;最后服務(wù)端將Token存入用戶的Cookie中,以便后續(xù)請求使用。

(2)用戶下次再訪問服務(wù)的時(shí)候,請求中攜帶有Token的Cookie訪問服務(wù)端,服務(wù)端要從請求的Cookie中獲取Token的信息,流程圖如下所示:

    Redis中與數(shù)據(jù)庫中都驗(yàn)證Token通過之后,系統(tǒng)直接將用戶設(shè)置成登錄狀態(tài)。至此就完成了用戶的自動(dòng)登錄

2、方案實(shí)現(xiàn)的核心代碼

(1)用戶的登錄的核心代碼

  @PostMapping("/login")    public String login(@RequestBody User loginUser, HttpServletResponse response) {        User user = userService.queryUserByName(loginUser.getUsername());        // 用戶驗(yàn)證通過        if (user != null && user.getPassword().equals(loginUser.getPassword())) {            //生成token 并保存用戶的token            String token = JWTUtils.generateToken(user);            user.setToken(token);            userService.save(user);
           //保存到redis中            stringRedisTemplate.opsForValue().set("login_token_" + token, user.getId().toString(), 7 * 24 * 60 * 60, TimeUnit.SECONDS);
           //設(shè)置cookie            Cookie cookie = new Cookie("token", token);            cookie.setPath("/");            //Cookie有效的時(shí)間存儲(chǔ)為一周            cookie.setMaxAge(7 * 24 * 60 * 60);            response.addCookie(cookie);            return "登錄成功";        } else {            return "用戶名或密碼錯(cuò)誤";        }    }

(2)用戶自動(dòng)登錄的核心代碼實(shí)現(xiàn)

@GetMapping("/autoLogin")    public String autoLogin(HttpServletRequest request) {        Cookie[] cookies = request.getCookies();        //無cookie        if (Objects.isNull(cookies)) {            return "自動(dòng)登錄失敗";        }
       //解析cookie中的token        for (Cookie cookie : cookies) {            if ("token".equals(cookie.getName())) {                String token = cookie.getValue();                //判斷redis中是否存在token的記錄信息,如果不存在就返回                if(stringRedisTemplate.opsForValue().get("login_token_" + token) == null){                    return "自動(dòng)登錄失敗";                }                //解析token                String userIdStr = JWTUtils.parseToken(token);                //通過token獲取用戶的信息                User user = userService.queryByToken(token);                if (Objects.nonNull(user) && user.getId().toString().equals(userIdStr)) {                    return "自動(dòng)登錄成功了";                } else {                    return "自動(dòng)登錄失敗";                }            }        }        return "自動(dòng)登錄失敗";    }

總結(jié):

    通過使用Token和Cookie的方式已實(shí)現(xiàn)了用戶自動(dòng)登錄功能。原理是用戶第一次登錄成功之后將Token保存到Cookie中,然后用戶再次登錄時(shí)檢測Token是否有效,從而實(shí)現(xiàn)自動(dòng)登錄的功能。


該文章在 2025/1/23 10:47:00 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲(chǔ)管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
亚洲综合另类专区在线 | 亚洲欧美综合国产不卡 | 在线观看一级大片婷婷 | 在线播放亚洲视频 | 污污网站国产精品白丝袜 | 午夜精品一区二区三区在线观看 |