精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

SpringCloud微服務中如何實現多端認證?

開發 架構
本文提出了一種靈活、可擴展的方案,以滿足 DailyMart 在業務發展過程中的多端認證需求。通過使用請求路徑區分不同端的請求來源,并在 SpringCloud Gateway 網關中實現相應的過濾器進行認證,方案具有靈活性、可擴展性和可維護性。

概述

DailyMart是一個ToC的在線購物商城,目前僅支持通過瀏覽器訪問。在商城中的所有操作都需要用戶先登錄。為了實現這一需求,我們可以采用以下技術方案:

  1. 用戶通過SpringCloud Gateway訪問CustomerService進行登錄認證。認證成功后,服務器返回一個JWT(JSON Web Token)。在接下來的操作中,用戶需要在請求頭中攜帶此Token。
  2. 在網關服務中,我們創建了一個名為ApiAuthenticatorFilter的過濾器。該過濾器用于驗證請求頭中是否包含Token,并檢查Token的有效性。如果請求頭中沒有攜帶Token,或者Token失效,則不允許訪問后端接口。

詳細交互流程如下圖1所示:

圖1:PC認證流程圖1:PC認證流程

多端認證需求

這種架構在初期可以滿足業務的發展需求。然而,隨著業務的擴展,我們需要考慮到現在大部分用戶使用手機進行購物的情況。因此,DailyMart也需要支持手機端訪問。但與瀏覽器不同,手機端的認證機制可能會有所不同。

例如,瀏覽器端的Token有效期通常設定為1小時,而手機端的Token有效期通常設置為7天或更長。此外,瀏覽器端的Token采用JWT這種去中心化的認證機制,而手機端的Token采用中心化的認證機制,需要調用手機端服務進行登錄認證。

同時,為了擴展業務,其他一些第三方應用可能也需要調用DailyMart的后端服務來獲取數據,對于第三方的應用一般采用appId + appSecret的方式進行認證,同時需要對接口參數進行簽名防止出現篡改和重放。(此方案在前文中有詳細說明,可以通過鏈接跳轉訪問查看。)

現在的問題是,如何在原有架構的基礎上滿足這三種不同形式的認證需求呢?

圖片圖片

解決方案

要解決這個問題,最關鍵在于如何判斷請求的來源,是來自瀏覽器端的請求、手機端的請求還是第三方的請求?

我們可以通過請求路徑進行區分,對于不同端的請求使用不同的路徑進行標識,可以做如下約定:

  • 手機端請求,需要在請求路徑上帶有/ph/
  • 瀏覽器請求,需要在請求路徑上帶有/pd/
  • 第三方請求,需要在路徑請求上帶有/pt/
  • ...

最終規定接口的完整請求路徑為:/服務名/api/來源標識/接口路徑/,如:http://localhost:9090/customer-service/api/pd/customer/info

這樣在SpringCloud Gateway網關先獲取請求的路徑,再根據請求的路徑判斷請求來源,最后根據請求來源實現不同的認證方案。

解決這個問題的關鍵在于如何判斷請求的來源,即是來自瀏覽器端、手機端還是第三方應用?

我們可以通過請求路徑進行區分,對于不同端的請求使用不同的路徑進行標識。例如:

  • 手機端請求,在請求路徑上帶有 /ph/
  • 瀏覽器端請求,在請求路徑上帶有 /pd/
  • 第三方請求,在請求路徑上帶有 /pt/
  • ...

最終,我們規定接口的完整請求路徑為:/服務名/api/來源標識/接口路徑/,例如:http://localhost:9090/customer-service/api/pd/customer/info

這樣,在SpringCloud Gateway網關中,我們需要創建一個過濾器,首先獲取請求的路徑,然后根據請求的路徑判斷請求來源,最后根據請求來源實現不同的認證方案。

代碼實現

有了解決方案,我們就很容易完成代碼實現了。

為了滿足多端認證的需求,在網關服務中我們可以抽取一個公共的認證接口ApiAuthenticator,具體的認證邏輯由具體實現類實現。

圖片圖片

在上面的類圖中,ProtectedApiAuthenticator用于實現第三方的認證邏輯,DefaultApiAuthenticator用于實現瀏覽器端的認證邏輯。

在網關過濾器ApiAuthenticatorFilter中,我們首先根據請求路徑獲取請求來源,然后根據請求來源找到對應的實現類。

@Component
@Slf4j
public class ApiAuthenticatorFilter implements GlobalFilter, Ordered {
    
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        URI uri = exchange.getRequest().getURI();
        String rawPath = uri.getRawPath();
        // 靜態接口直接過濾
        if (handleExcludeUrl(rawPath)) {
            return chain.filter(exchange);
        }
      
        // 獲取認證邏輯
        ApiAuthenticator apiAuthenticator = getApiAuthenticator(rawPath);
        AuthenticatorResult authenticatorResult = apiAuthenticator.auth(exchange);
        
        if (!authenticatorResult.isResult()) {
            return Mono.error(new HttpServerErrorException(
                    HttpStatus.METHOD_NOT_ALLOWED, authenticatorResult.getMessage()));
        }
        
        return chain.filter(exchange);
        
    }
    
    
    
    /**
     * 確定認證策略
     * @param rawPath 請求路徑
     */
    private ApiAuthenticator getApiAuthenticator(String rawPath) {
        String[] parts = rawPath.split("/");
        if (parts.length >= 4) {
            String parameter = parts[3];
            return switch (parameter) {
                case PROTECT_PATH -> new ProtectedApiAuthenticator();
                case PRIVATE_PATH -> new PrivateApiAuthenticator();
                case PUBLIC_PATH -> new PublicApiAuthenticator();
                case DEFAULT_PATH -> new DefaultApiAuthenticator();
                default -> throw new IllegalStateException("Unexpected value: " + parameter);
            };
        }
        return new DefaultApiAuthenticator();
    }
 
}

以下是瀏覽器端的認證邏輯,它會驗證JWT token的有效性。如果token失效,則直接返回錯誤提示給用戶,引導其重新登錄。

@Component
@Slf4j
public class DefaultApiAuthenticator implements ApiAuthenticator {
    
    @Override
    public AuthenticatorResult auth(ServerWebExchange exchange) {
        ServerHttpRequest request = exchange.getRequest();
        HttpHeaders httpHeaders = request.getHeaders();
        
        // 獲取JWT請求頭 Authorization
        String token = httpHeaders.getFirst(HttpHeaders.AUTHORIZATION);
        
        if (Objects.nonNull(token)) {
            try {
                String subjectFromJWT = JwtUtil.getSubjectFromJWT(token);
                log.info("用戶請求token: {} , 身份Subject:{}", token, subjectFromJWT);
                //重新設置請求頭
                mutateNewHeader(exchange, subjectFromJWT);

                return new AuthenticatorResult(true, "認證通過");
            } catch (ParseException | JOSEException e) {
                log.error("token解析失敗");
                return new AuthenticatorResult(false, "Token錯誤,請重新登錄!");
            }
            
        }
        
        return new AuthenticatorResult(false, "Token為空,請重新登錄!");
    }
}

小結

本文提出了一種靈活、可擴展的方案,以滿足 DailyMart 在業務發展過程中的多端認證需求。通過使用請求路徑區分不同端的請求來源,并在 SpringCloud Gateway 網關中實現相應的過濾器進行認證,方案具有靈活性、可擴展性和可維護性。

責任編輯:武曉燕 來源: JAVA日知錄
相關推薦

2024-09-04 11:16:44

端口Spring配置類

2024-06-04 10:05:48

微服務網關日志

2024-03-06 08:36:36

2025-01-07 14:09:58

微服務授權模式

2022-03-03 08:51:09

微服務認證中心授權模式

2023-03-01 08:57:32

2024-07-31 09:09:20

2024-12-27 10:12:28

2020-12-17 08:10:19

身份驗證授權微服務

2021-06-09 09:42:50

SpringCloud微服務灰度發布

2021-03-09 09:33:42

網關授權微服務

2022-04-14 08:51:49

微服務Redisson分布式鎖

2023-02-07 07:43:27

微服務應用框架

2025-09-08 01:15:00

2022-04-09 14:45:02

微服務常見概念Spring

2020-11-15 23:48:57

服務網格微服務網絡網絡技術

2024-11-06 16:27:12

2021-12-29 08:30:48

微服務架構開發

2022-03-31 08:15:38

微服務服務拆分架構

2024-07-10 10:51:39

SpringEureka數據中心
點贊
收藏

51CTO技術棧公眾號

丁香花在线影院观看在线播放| 日本亚洲精品在线观看| 亚洲免费av一区| 国产黄色在线网站| 成人一区二区三区视频| 992tv成人免费影院| 日韩精品电影一区二区| 国产亚洲高清一区| 欧美日韩中文字幕| 在线看无码的免费网站| 欧美在线 | 亚洲| 日本欧美久久久久免费播放网| 久久av在线看| 亚洲成人黄色av| 日韩一区二区三区精品| 在线免费观看成人短视频| 老司机午夜网站| 久久经典视频| jlzzjlzz亚洲日本少妇| 国产精品香蕉在线观看| 国产大片中文字幕| 国产精品黑丝在线播放| 日韩精品视频观看| 亚洲成人激情小说| 国产精品亲子伦av一区二区三区| 亚洲国产日韩一区二区| 色乱码一区二区三区熟女| 亚洲 欧美 自拍偷拍| 欧美在线一卡| 国产99亚洲| 欧美r级电影在线观看| 男操女免费网站| 僵尸再翻生在线观看免费国语| 亚洲欧美日韩国产综合| 色一情一乱一伦一区二区三区| 免费观看的毛片| 国产精品资源在线看| 国产精品视频精品| 黄色片视频免费| 在线亚洲观看| 2019精品视频| 日本午夜精品理论片a级app发布| 欧美一区网站| 丝袜情趣国产精品| 美国一级黄色录像| 精品免费视频| 亚洲欧洲av一区二区| 久久人妻一区二区| 久久亚州av| 亚洲国产毛片完整版| av漫画在线观看| 成人台湾亚洲精品一区二区| 欧美一区二区三区四区五区| 天天综合天天添夜夜添狠狠添| 99re久久| 欧美日韩高清一区二区三区| 亚洲国产91精品在线观看| 亚洲国产一区二区精品视频| 偷拍自拍在线| 2020国产精品| 日本电影一区二区三区| 国产一区二区三区福利| 国产欧美精品一区二区色综合朱莉| 欧美亚洲丝袜| 高清中文字幕一区二区三区| 国产精品视频免费| 一区精品视频| 91高清在线观看视频| 亚洲另类中文字| 亚洲精品久久久久久久蜜桃臀| 国产蜜臀一区二区打屁股调教| 亚洲va欧美va人人爽| 欧美网站免费观看| 免费在线观看一区| 制服丝袜av成人在线看| 四虎永久免费观看| 久久综合社区| 一区二区三区国产在线观看| 国产在视频线精品视频| 一区二区电影在线观看| 国内精品久久久久| 亚洲精品成人在线视频| 美女在线视频一区| 成人做爰66片免费看网站| 日韩欧美在线观看一区二区| 欧美国产禁国产网站cc| 中文字幕色呦呦| av美女在线观看| 色综合久久综合中文综合网| 岛国av在线免费| 精品国产午夜肉伦伦影院| 亚洲人成毛片在线播放| 欧美一区二区三区爽爽爽| 亚洲激情婷婷| 国产精品自产拍在线观看| 精品免费久久久| 久久综合九色欧美综合狠狠| 宅男噜噜99国产精品观看免费| 性欧美video高清bbw| 欧美性生交xxxxxdddd| 成人日韩在线视频| 久久久免费毛片| 啊v视频在线一区二区三区| 久久精品国产亚洲av麻豆色欲 | 一区二区三区美女xx视频| 亚洲精品一区二区三区在线播放| 亚洲欧洲视频| 国产一区红桃视频| 空姐吹箫视频大全| 自拍偷拍欧美激情| mm1313亚洲国产精品无码试看| 九色精品蝌蚪| 一区三区二区视频| 日本网站在线播放| 国产精品乡下勾搭老头1| 日本高清一区| av手机在线观看| 91精品国产综合久久久久久久久久| 漂亮人妻被黑人久久精品| 在线精品国产| 国产精品电影在线观看| 天天躁日日躁狠狠躁伊人| 亚洲品质自拍视频网站| 超碰超碰在线观看| 亚洲综合图色| 国内精久久久久久久久久人| aaa一区二区| 国产精品色眯眯| 女人另类性混交zo| 亚州综合一区| 久久久欧美精品| a毛片在线免费观看| 中文字幕精品三区| 91在线视频观看免费| 亚洲+变态+欧美+另类+精品| 97国产在线视频| 丰满人妻一区二区三区四区53| 中文字幕一区二区三区乱码在线| 99免费视频观看| 外国成人在线视频| 91av视频在线免费观看| 日本波多野结衣在线| 亚洲高清免费视频| 91九色蝌蚪porny| 好看不卡的中文字幕| 99视频日韩| 污污视频在线| 精品免费一区二区三区| 久草视频免费在线| 成人午夜精品一区二区三区| 欧美做暖暖视频| 日韩免费高清视频网站| 欧美激情一级精品国产| 人妻无码中文字幕| 精品成人在线视频| 青青草视频成人| 欧美一级久久| 日韩欧美在线观看强乱免费| 成人涩涩视频| 久久在线视频在线| 国产成人精品一区二三区四区五区 | 欧美激情91| 国产精品乱码| 三妻四妾完整版在线观看电视剧| 亚洲视频在线看| 正在播放亚洲精品| 亚洲欧美一区二区三区极速播放| 亚洲视频在线不卡| 亚洲人成毛片在线播放女女| 久草精品电影| 99久久婷婷国产综合精品首页| 中文字幕综合在线| 国产剧情久久久| 亚洲午夜av在线| 天天躁日日躁aaaa视频| 麻豆成人久久精品二区三区小说| 免费观看亚洲视频| 九九热播视频在线精品6| 日本亚洲欧美三级| 国产在线看片| 亚洲精品成人av| 在线观看免费视频a| 有码一区二区三区| 人妻在线日韩免费视频| 久久精品国产999大香线蕉| 日本精品福利视频| 精品人妻一区二区三区四区不卡 | 北条麻妃国产九九精品视频| 男人操女人逼免费视频| 成人精品视频| 97超级碰碰| 日韩视频网站在线观看| 久久福利视频网| 日本视频在线观看一区二区三区| 欧美三级三级三级| 国产一级大片在线观看| 日本一区二区三级电影在线观看 | 久久天堂影院| 欧美极品少妇全裸体| 福利视频在线导航| 日韩精品一区二区三区蜜臀| 国产三级av片| 伊人性伊人情综合网| av男人的天堂av| 国产高清精品久久久久| av在线无限看| 亚洲高清资源| 亚洲一区尤物| 亚洲色图美女| 99国产精品久久久久老师| 91成人在线| 8x海外华人永久免费日韩内陆视频| 免费av在线网址| 精品中文视频在线| 国产三级小视频| 欧美日韩一区二区电影| 欧美一级片免费在线观看| 亚洲欧美日韩国产手机在线| 性欧美一区二区| 99久久伊人久久99| 99国产精品免费视频| 日本色综合中文字幕| 91免费视频网站在线观看| 激情久久久久久久| 国产欧美综合一区| 色999日韩| 午夜一区二区三视频在线观看| 日韩av系列| 国产精品嫩草在线观看| 亚洲精品v亚洲精品v日韩精品| 国产区精品在线观看| av免费在线一区| 日本精品久久中文字幕佐佐木| 波多野结衣久久| 欧美激情亚洲视频| 国产丝袜精品丝袜| 欧美精品aaa| 色a资源在线| 久久99久久99精品中文字幕 | 日韩精品丝袜美腿| 国内精品视频在线播放| 66精品视频在线观看| 91久久久在线| 国产区一区二| 97久久夜色精品国产九色| 欧美成人一级| 91超碰在线电影| 超碰成人97| 国产一区国产精品| 美女一区二区在线观看| 国产一区二区三区高清| 欧美sss在线视频| 久久影院理伦片| 欧美女王vk| 少妇特黄a一区二区三区| 成人精品中文字幕| 先锋影音网一区| 日韩片欧美片| 裸体大乳女做爰69| 欧美激情第二页| 玩弄中年熟妇正在播放| 久久国产精品久久久久久电车 | 日本久久免费| 国产精品69久久久久| 国产精品传媒麻豆hd| 91久久久久久国产精品| 涩爱av色老久久精品偷偷鲁 | 欧美一级高清免费播放| 亚洲午夜天堂| 国产精品丝袜久久久久久高清| 婷婷精品久久久久久久久久不卡| 成人午夜在线影院| 一区二区三区亚洲变态调教大结局 | 国产午夜精品久久久久久久| а天堂中文在线资源| 亚洲精品国产精华液| 亚洲精品1区2区3区| 色av综合在线| av手机免费看| 日韩电视剧在线观看免费网站| 国产视频精品久久| 久久久精品视频在线观看| av老司机在线观看| 国产精品久久久久久久久久尿| 亚洲午夜国产成人| 国产经品一区二区| 精品国产中文字幕第一页| 日韩video| 国产精品久久久免费| 九一精品久久久| 99久久国产免费看| 久久爱一区二区| 精品国产91久久久久久| 亚洲最大成人av| 亚洲精品大尺度| av中文在线| 久久久久久成人| 玖玖精品在线| 极品尤物一区二区三区| 97色伦图片97综合影院| 激情综合在线观看| 国产高清亚洲一区| 激情无码人妻又粗又大| 五月天一区二区| 国产免费黄色片| 亚洲午夜精品久久久久久性色| 欧美v亚洲v| 国产欧美精品日韩精品| 亚洲午夜久久| 国产美女永久无遮挡| 精油按摩中文字幕久久| 波多野结衣 在线| 亚洲电影中文字幕在线观看| 艳母动漫在线观看| 国产一区二区三区91| 福利视频一二区| 精品一区二区三区不卡| 深爱五月激情网| 亚洲第一主播视频| 国产白浆在线观看| 日韩中文在线中文网三级| 中文字幕在线视频网站| 国产中文一区二区| 午夜视频一区| 182午夜视频| 国产精品美女久久久久高潮| 一本一道无码中文字幕精品热| 精品国产123| 日本成人不卡| 91系列在线播放| 91影院成人| 91国产精品视频在线观看| 久久影音资源网| 国产日产精品一区二区三区| 精品久久国产97色综合| 中文字幕有码在线观看| 91在线直播亚洲| 香蕉综合视频| 国产农村妇女精品久久| 1000精品久久久久久久久| 这里只有精品9| 一区二区三区无码高清视频| 日韩大尺度黄色| 欧美日韩亚洲一区二区三区在线观看 | 欧美激情精品久久| 欧美一区二区美女| 日韩精品黄色| 成人免费看片视频| 91成人看片| 黄色一级片免费播放| 亚洲美女视频在线观看| a视频免费在线观看| 欧美丰满少妇xxxxx| 亚洲伊人影院| 真实国产乱子伦对白视频| 成人午夜av影视| 日韩成人免费在线观看| 日韩av一区在线| 不卡av播放| 亚洲二区自拍| 国产一区二区三区综合| 欧美日韩精品一区二区三区视频播放| 欧美大胆人体bbbb| av在线资源| 欧美日韩亚洲一区二区三区四区| 日本中文一区二区三区| 992在线观看| 欧美mv和日韩mv国产网站| 激情aⅴ欧美一区二区欲海潮| 欧美日韩精品不卡| 美女视频黄a大片欧美| 四虎精品免费视频| 精品国产乱码久久久久久免费| 岛国av在线网站| 日本一区二区三区四区高清视频| 九九精品视频在线看| 国产精品第108页| 一区二区三区精品99久久| 国产不卡精品在线| 男人添女人下部高潮视频在观看| 久久婷婷国产综合精品青草| 亚洲影院一区二区三区| 欧美激情第一页xxx| 一本久久青青| 岛国av在线免费| 亚洲午夜av在线| 成人网视频在线观看| 成人久久18免费网站漫画| 国产亚洲福利| 久草福利资源在线| 亚洲精品成人久久| 国产精品国产三级在线观看| 国产在线精品91| 成人欧美一区二区三区小说 | 日本高清xxxx| 久久综合国产精品| 99国产成人精品| 日韩免费在线播放| 国内精品久久久久久久影视蜜臀| 国产中年熟女高潮大集合|