国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

三年探索,登錄注冊之路仍漫漫

開發 項目管理
用戶系統是非常基礎的系統,但是很多程序員工作中可能并沒有真正的參與到用戶系統的開發,通過此文可以對用戶登錄流程及配套功能有一個全面的了解。

不出意外的話,我猜在座的各位同學,剛剛學編程的時候,80%以上的人寫的第一個項目不是學生管理系統,就是用戶的登錄、注冊;需求都是源于生活而高于生活,因為學生對這些場景最為熟悉,功能也相對簡單,拿來練手最適合不過了;但是,一個看似小小的登錄、注冊功能,要想把他真正的做好,并不是一件容易的事情;本文通過圖示及代碼的方式介紹用戶登錄流程及技術實現,內容包括用戶登錄,用戶驗證,如何獲取操作用戶的信息以及一些黑名單及匿名接口如何免驗證相關的實現。

業務圖解

對于用戶登錄來說、涉及到了用戶注冊、登錄驗證幾個方面,通過流程圖演示如何處理(新用戶/老用戶)登錄。

圖片圖片

流程解讀

客戶端-登錄界面(通常手機驗證碼登錄)

  • 填寫手機號
  • 發送驗證碼
  • 填寫驗證碼
  • 勾選新用戶自動注冊

服務端-用戶驗證

  • 驗證賬號驗證碼是否正確
  • 驗證用戶是否存在(不存在出初始化用戶信息)
  • 完成驗證生成 token
  • 將 token 返回給客戶端

用戶信息設計:

圖片圖片

驗證流程圖解

圖片圖片

登錄驗證流程涉及到了兩個接口,兩個緩存:

  • 獲取驗證碼接口,給手機號發送驗證碼并設置驗證碼緩存,設置過期時間。
  • 登錄接口,提交手機號及驗證碼,讀取緩存進行匹配驗證,成功則生成 token 返回給客戶端,客戶端登錄成功,登錄后請求頭攜帶 token 進行業務請求即可。

關于 token 過期時間

通常我們 token 的過期時間是根據客戶端的類型來定義的,app 的過期時間會更長一些(通常一個星期)。

web 端過期時間以小時為單位,如果控制過期時間可以將 web 登錄和 app 登錄拆分為兩個接口(能夠分流,接口壓力更小),或者是根據請求頭信息進行判斷即可,是移動端就設置 7 天,是 web 端就設置兩小時。

關于業務請求 token 驗證

登錄成功后,客戶端每次請求都會攜帶 token,通常我們會有一個網關來進行 token 驗證,網關用于登錄驗證的核心就是登錄成功后寫入的 token 作為 key,值為用戶基礎信息的緩存。

圖解如下:

圖片圖片

驗證成功后,重寫內部請求頭,將用戶的的 id,賬號,昵稱信息放入請求頭中,這樣可以方便業務系統獲取當前操作用戶信息以及權限控制等等。

關于登出操作

用戶攜帶 token 請求登出接口,登出接口對 token 對應的緩存進行刪除操作,返回 401 即可,客戶端獲取到 401 就會跳轉到登錄頁面。

關于匿名請求(免登錄)

通常匿名請求放行有兩種方案:

  • 授權 token,為 token 設置單位時間內請求次數
  • 配置路徑放行規則,對請求接口路徑進行正則匹配,符合正則規則的進行放行

方案 1:授權 token,限制單位時間請求次數

優點就是雖然是免登錄接口,但是接口的操作對象可以追溯,請求次數可控,避免被非法利用;缺點就是需要更多的編碼及配置工作。

技術實現:

  • 提供一個授權 token 管理頁面,主要管理 token 使用者,token 的值,單位時間訪問次數(如每分鐘 60 次)
  • 增刪改查,將授權 token 存放到緩存中,使用 map 進行存儲,key 為 token,值為每分鐘訪問次數
  • 單位時間計數緩存,過期時間為 1 分鐘

這時候我們需要在上面的驗證流程圖基礎上進行升級:

圖片圖片

請求次數檢查代碼實現:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;

/**
 * 授權token請求限制緩存
 */
@Component
public class AuthTokenRequestLimitCache {

    @Autowired
    private RedisTemplate<String, Integer> redisTemplate;

    private static final String AUTH_TOKEN_LIMIT_KEY_PREFIX = "auth_token_limit";

    /**
     * 請求次數+1并檢查是否超限
     *
     * @param token
     * @return 是否放行 
     */
    public boolean incrementWithCheck(String token) {
        // 1.獲取token請求次數限制,獲取為null代表授權配置已被修改,此token已經不具備權限
        Integer limit = getLimit(token);
        if (limit == null) {
            return false;
        }
        // 2.組裝緩存key,讀取緩存
        String key = String.join(":", AUTH_TOKEN_LIMIT_KEY_PREFIX, token);
        Integer count = redisTemplate.opsForValue().get(key);
        // 3.沒有值代表一分鐘內沒有請求產生了
        if (count == null) {
            // 初始化值
            redisTemplate.opsForValue().increment(key);
            // 設置過期時間
            redisTemplate.expire(key, 1L, TimeUnit.MINUTES);
            return true;
        }
        // 自增并獲取當前值 大于限制的話 返回false 網關過濾器返回提示信息(如請求過于頻繁)
        Long inc = redisTemplate.opsForValue().increment(key);
        return inc <= limit;
    }

    /**
     * 獲取限值
     *
     * @param token
     * @return
     */
    public Integer getLimit(String token) {
        Object limit = redisTemplate.opsForHash().get("auth_token_limit", token);
        return limit == null ? null : (Integer) limit;
    }
}

對于授權接口,通常是只允許 get 操作,對數據進行提交或者更新是不被允許的,當然這個是業務層面的,最終取決于系統設計。

方案 2:請求路徑正則校驗

我們在網關的配置文件中增加匿名接口規則,請求到網關時,檢查請求的路徑是否符合匿名接口規則,是則放行,不是則進行 token 校驗,方案比較簡單,只需要對網關進行處理即可。

關于黑名單

對于一個系統來說,黑名單是最后一道關卡,所以為了安全我們需要對問題用戶進行黑名單操作。

具體實現也比較簡單:

  • 用戶管理頁面提供一個拉黑的按鈕,拉黑后,這些用戶的 id 會存儲到一個 set 集合中去
  • 登錄時候檢查用戶是否在黑名單中,是則拒絕登錄并提示
  • 如果用戶已經登錄后進行拉黑操作,網關會在鑒權通過后檢查用戶是否在黑名單中,是則刪除 token 對應緩存,返回 401,401 就會跳到登錄頁,步驟 2 就會進行攔截

總結

用戶系統是非常基礎的系統,但是很多程序員工作中可能并沒有真正的參與到用戶系統的開發,通過此文可以對用戶登錄流程及配套功能有一個全面的了解。

責任編輯:武曉燕 來源: 一安未來
相關推薦

2020-10-29 15:40:08

數字貨幣比特幣區塊鏈

2015-08-26 11:29:53

程序員

2018-11-16 09:29:59

2016-12-01 13:17:11

虛擬運營商工信部

2012-07-31 09:19:02

程序員

2010-02-26 10:22:11

IPv4

2011-08-08 10:06:48

iCloud

2009-06-17 17:32:44

NetBeans 6.

2015-06-19 10:59:49

數據中心新能源

2012-11-06 09:27:34

2021-10-29 16:47:10

運營商電信移動

2023-04-23 13:30:19

ERP廠商華為

2013-07-17 09:13:19

2022-02-16 09:55:39

Elastic 8開源索引

2020-09-22 07:48:19

AI

2019-12-05 14:07:53

人工智能AI自動駕駛

2022-12-15 16:57:45

2009-06-29 09:41:11

SaaS軟件

2017-10-30 12:00:05

2019-08-23 11:13:29

互聯網架構外賣
點贊
收藏

51CTO技術棧公眾號

伊人成色综合网| 日韩欧美手机在线| 日皮视频在线观看| 国产成人免费av在线| 亚洲伊人春色| 制服丝袜av成人在线看| a√免费观看在线网址www| 久久av老司机精品网站导航| 国产精品永久免费在线| 日日夜夜亚洲精品| 精品成人私密视频| 久热av在线| 亚洲欧美中日韩| 岛国大片在线播放| 老司机免费视频久久| 成人字幕网zmw| 一区二区三区欧洲区| 亚洲电影天堂av| 91精品大全| 一级特黄大欧美久久久| 日韩精品无码一区二区三区免费| 日韩av一二三| 久久精品成人一区二区三区蜜臀 | 日韩精品久久久久| 久久男人的天堂| 亚洲人成久久| 日韩精品一区二区三区在线播放 | 亚洲精品一品区二品区三品区| ga∨成人网| 99久久999| 亚洲精品在线观看视频| 好男人免费精品视频| 一区二区三区在线观看国产| 国产一区二区三区精彩视频| 高清视频一区二区| 日韩中文在线字幕| 久久精品国产一区二区三 | 亚洲综合成人在线视频| 亚洲精品中文字幕无码蜜桃| 99视频一区二区| 国产精品久久久久久久乖乖| 麻豆成人在线观看| 亚洲视频小说| 精品亚洲免费视频| 日韩一二区视频| 高清在线观看日韩| 精品国产一区三区| 95精品视频在线| 一级黄色香蕉视频| 亚洲三级免费电影| 最新二区三区av| 一本到不卡免费一区二区| 免费在线稳定资源站| 成人ssswww在线播放| 欧美日韩视频在线观看一区二区三区| 麻豆电影在线| 欧美在线视频播放| 欧美极品欧美精品欧美图片| 粉嫩一区二区三区性色av| 26uuu另类亚洲欧美日本一| 欧美日韩一本| 午夜在线小视频| 欧美一区二区三区视频在线| 在线免费观看a视频| 日韩精品免费电影| 91精品国产一区二区在线观看| 欧美成人精品三级在线观看 | 成人午夜免费视频| 欧美 日韩 国产一区| 亚洲人成影院在线观看| 伪装者免费全集在线观看| 欧美日韩国产大片| 2019中文字幕在线电影免费| 自拍偷拍亚洲在线| 精品国产乱码久久久久久果冻传媒 | 少妇高潮久久久久久潘金莲| 欧美视频精品全部免费观看| 日本高清视频精品| 99国产精品久久久久久久成人热| 亚洲精品人成| 国产精品区一区二区三| 自拍视频在线网| 日本激情一区| 亚洲.国产.中文慕字在线| www.亚洲.com| 国产一区二区动漫| 综合综合综合综合综合网| 狠狠色伊人亚洲综合网站色| 风流少妇一区二区| 免费h片在线| 337p日本欧洲亚洲大胆色噜噜| 亚洲精品黑牛一区二区三区| 国产精品二区三区| 97se亚洲国产综合自在线| 亚洲精品视频在线免费| 国产一区二区三区丝袜| 香蕉久久网站| 可以在线看的av网站| 欧美亚洲免费在线一区| 99久久久成人国产精品| 国产精品一区二区欧美| 久久精品一区二区| 韩国av网站在线| 欧美在线日韩在线| 国产精品99久久久久久有的能看 | 国产成人精品a视频一区www| 91精品国产综合久久国产大片| 久久蜜桃资源一区二区老牛| 毛片在线看网站| 99国产超薄肉色丝袜交足的后果| 欧美不卡视频一区发布| 91在线视频在线| av一区二区三区免费| 国产成人午夜片在线观看高清观看| 亚洲一区二区三区精品中文字幕 | 日本一区二区三区dvd视频在线| 伊人中文在线| 精品国产一区二区三区在线观看 | 成人激情视频网| 成人h精品动漫一区二区三区| 经典三级在线| 久久99国产精品自在自在app | 中文字幕在线不卡| 天堂√8在线中文| 高清一区二区三区视频| 久久精品欧美日韩| 深夜成人在线| 国产精品jizz视频| 亚洲无线码一区二区三区| 天堂精品在线视频| 青青草免费在线视频观看| 欧美精品一二三区| 亚洲午夜精品一区二区国产| 91大神影片| 欧美大片在线看免费观看| 福利电影一区二区| 51精品视频| 日本一区视频在线观看| 在线观看免费一区| 影音先锋成人在线电影| 最近97中文超碰在线| 欧美一级高清免费| 中文字幕一区二区视频| 果冻天美麻豆一区二区国产| 精品少妇一区二区三区在线| 亚洲国产免费av| 欧美aa在线视频| 黄在线观看免费网站ktv| 一本一本a久久| 欧美电影免费观看完整版| 亚洲激情黄色| 色网站免费在线观看| 黑人中文字幕一区二区三区| 色久优优欧美色久优优| 欧美fxxxxxx另类| bbbbbbbbbbb在线视频| 精品在线视频一区二区| 欧美一区二区三区视频免费 | 欧美猛男男办公室激情| 欧美成人tv| fc2在线中文字幕| 91天堂在线视频| 日韩精品免费| 视频在线观看一区| 欧美综合自拍| 日韩.com| 动漫成人在线| 亚洲国产精品99久久| 日韩专区中文字幕一区二区| 看黄网站在线观看| 午夜精品亚洲一区二区三区嫩草| 精品国产乱码久久久久久牛牛| 日韩av不卡一区二区| 竹内纱里奈兽皇系列在线观看 | 久久久久9999亚洲精品| 日韩三级av高清片| 超污网站在线观看| 成人在线视频网站| 欧美男人的天堂一二区| 久久av资源站| 久久av网站| 最大av网站| 欧美大香线蕉线伊人久久| 亚洲国产成人久久| 91在线看国产| 精品国产乱码久久久| 日本三级视频在线观看| 国产资源第一页| 97超级碰碰人国产在线观看| 午夜精品久久久久久久99樱桃| 欧美+亚洲+精品+三区| a天堂资源在线| 天天操,天天操| 亚洲最大的av网站| 精品国产乱码久久久久久图片 | 老司机一区二区三区| 成人免费无遮挡| 德国一级在线视频| 欧美一区亚洲二区| 欧美精品电影在线|