成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

spring cloud admin開(kāi)源項(xiàng)目ACE源碼閱讀-鑒權(quán)

buildupchao / 1458人閱讀

摘要:鑒權(quán)項(xiàng)目是一個(gè)比較完整的使用了框架的開(kāi)源項(xiàng)目,可以用它來(lái)快速搭建分布式系統(tǒng)。本次著重看的部分是其服務(wù)以及用戶鑒權(quán)的部分。啟動(dòng)項(xiàng)目依次啟動(dòng),,,即可。服務(wù)端則負(fù)責(zé)生成,驗(yàn)證和更新。服務(wù)認(rèn)證由處理。的鑒權(quán)也是通過(guò)的。

鑒權(quán)

ACE項(xiàng)目是一個(gè)比較完整的使用了spring cloud框架的開(kāi)源項(xiàng)目,可以用它來(lái)快速搭建分布式系統(tǒng)。本次著重看的部分是其服務(wù)以及用戶鑒權(quán)的部分。ACE有一個(gè)鑒權(quán)服務(wù),負(fù)責(zé)微服務(wù)群的鑒權(quán)。啟動(dòng)ACE項(xiàng)目依次啟動(dòng)center,auth-server,admin,gateway即可。

模塊架構(gòu)

鑒權(quán)模塊分為服務(wù)端和客戶端(另有一個(gè)common模塊,可忽略,是一些鑒權(quán)模塊公用代碼的提?。?。應(yīng)用程序依賴客戶端,客戶端提供了兩個(gè)攔截器,工具類(lèi),并和服務(wù)端通信的feign。服務(wù)端則負(fù)責(zé)token生成,驗(yàn)證和更新。

代碼分析 程序啟動(dòng)

auth-server啟動(dòng)時(shí)初始化KeyConfiguration,獲得userSecret和serviceSecret.并在啟動(dòng)結(jié)束的鉤子類(lèi)AuthServerRunner中,分別設(shè)置User和Server的pri/puk.User用于用戶認(rèn)證,Server用于微服務(wù)認(rèn)證。

admin和gateway在啟動(dòng)的時(shí)候,會(huì)調(diào)用auth-client的自動(dòng)配置,生成ServiceAuthConfig和UserAuthConfig的實(shí)例。同時(shí)auth-client的AuthClientRunner會(huì)請(qǐng)求pubkey到ServiceAuthConfig和UserAuthConfig的實(shí)例。同時(shí)在應(yīng)用各自的WebConfiguration中添加UserAuthRestInterceptor和ServiceAuthRestInterceptor攔截器

運(yùn)行階段

用戶認(rèn)證,由UserAuthRestInterceptor處理。
在用戶登錄的時(shí)候,調(diào)用jwtTokenUtil.generateToken生成token。這個(gè)token的生成規(guī)則稍后再論。在瀏覽器記錄一個(gè)Admin-Token.

--auth-server
public String login(JwtAuthenticationRequest authenticationRequest) throws Exception {
        UserInfo info = userService.validate(authenticationRequest);
        if (!StringUtils.isEmpty(info.getId())) {
            return jwtTokenUtil.generateToken(new JWTInfo(info.getUsername(), info.getId() + "", info.getName()));
        }
        throw new UserInvalidException("用戶不存在或賬戶密碼錯(cuò)誤!");
}

登錄之后的請(qǐng)求都會(huì)經(jīng)過(guò)UserAuthRestInterceptor,在解析token的時(shí)候同時(shí)會(huì)進(jìn)行過(guò)期,簽名合法等驗(yàn)證。并把這些信息加到threadLocal中去。

--UserAuthRestInterceptor
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        ......
        IJWTInfo infoFromToken = userAuthUtil.getInfoFromToken(token);
        BaseContextHandler.setUsername(infoFromToken.getUniqueName());
        BaseContextHandler.setName(infoFromToken.getName());
        BaseContextHandler.setUserID(infoFromToken.getId());
        return super.preHandle(request, response, handler);
}
    
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        BaseContextHandler.remove();
        super.afterCompletion(request, response, handler, ex);
}

服務(wù)認(rèn)證由ServiceAuthRestInterceptor處理。service的鑒權(quán)也是通過(guò)user的token。通過(guò)serviceAuthConfig.getTokenHeader()來(lái)解析service的信息。

--ServiceAuthRestInterceptor
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
       ......
        String token = request.getHeader(serviceAuthConfig.getTokenHeader());
        IJWTInfo infoFromToken = serviceAuthUtil.getInfoFromToken(token);
        String uniqueName = infoFromToken.getUniqueName();
        for(String client:serviceAuthUtil.getAllowedClient()){
            if(client.equals(uniqueName)){
                return super.preHandle(request, response, handler);
            }
        }
        throw new ClientForbiddenException("Client is Forbidden!");
}
一些方法解讀(待補(bǔ)充)

jwtTokenUtil.generateToken:生成用戶token
userService.validate:驗(yàn)證用戶的合法性
userAuthUtil.getInfoFromToken(token):從token中獲得用戶名稱(chēng)和ID等信息。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/71736.html

相關(guān)文章

  • 分布式系統(tǒng)--感性認(rèn)識(shí)JWT

    摘要:的安全性不好,攻擊者可以通過(guò)獲取本地進(jìn)行欺騙或者利用進(jìn)行攻擊。 好久沒(méi)寫(xiě)博客了,因?yàn)樽罱疽笪覍W(xué)spring cloud ,早點(diǎn)將以前軟件遷移到新的架構(gòu)上。所以我那個(gè)拼命的學(xué)吶,總是圖快,很多關(guān)鍵的筆記沒(méi)有做好記錄,現(xiàn)在又遺忘了很多關(guān)鍵的技術(shù)點(diǎn),極其罪惡! 現(xiàn)在想一想,還是踏踏實(shí)實(shí)的走比較好。這不,今天我冒了個(gè)泡,來(lái)補(bǔ)一補(bǔ)前面我所學(xué)所忘的知識(shí)點(diǎn)。 想要解鎖更多新姿勢(shì)?請(qǐng)?jiān)L問(wèn)我的博客...

    sherlock221 評(píng)論0 收藏0
  • 架構(gòu)~微服務(wù)

    摘要:接下來(lái)繼續(xù)介紹三種架構(gòu)模式,分別是查詢分離模式微服務(wù)模式多級(jí)緩存模式。分布式應(yīng)用程序可以基于實(shí)現(xiàn)諸如數(shù)據(jù)發(fā)布訂閱負(fù)載均衡命名服務(wù)分布式協(xié)調(diào)通知集群管理選舉分布式鎖和分布式隊(duì)列等功能。 SpringCloud 分布式配置 SpringCloud 分布式配置 史上最簡(jiǎn)單的 SpringCloud 教程 | 第九篇: 服務(wù)鏈路追蹤 (Spring Cloud Sleuth) 史上最簡(jiǎn)單的 S...

    xinhaip 評(píng)論0 收藏0
  • Spring Security

    摘要:框架具有輕便,開(kāi)源的優(yōu)點(diǎn),所以本譯見(jiàn)構(gòu)建用戶管理微服務(wù)五使用令牌和來(lái)實(shí)現(xiàn)身份驗(yàn)證往期譯見(jiàn)系列文章在賬號(hào)分享中持續(xù)連載,敬請(qǐng)查看在往期譯見(jiàn)系列的文章中,我們已經(jīng)建立了業(yè)務(wù)邏輯數(shù)據(jù)訪問(wèn)層和前端控制器但是忽略了對(duì)身份進(jìn)行驗(yàn)證。 重拾后端之Spring Boot(四):使用JWT和Spring Security保護(hù)REST API 重拾后端之Spring Boot(一):REST API的搭建...

    keelii 評(píng)論0 收藏0
  • Spring Web

    摘要:認(rèn)證鑒權(quán)與權(quán)限控制在微服務(wù)架構(gòu)中的設(shè)計(jì)與實(shí)現(xiàn)一引言本文系認(rèn)證鑒權(quán)與權(quán)限控制在微服務(wù)架構(gòu)中的設(shè)計(jì)與實(shí)現(xiàn)系列的第一篇,本系列預(yù)計(jì)四篇文章講解微服務(wù)下的認(rèn)證鑒權(quán)與權(quán)限控制的實(shí)現(xiàn)。 java 開(kāi)源項(xiàng)目收集 平時(shí)收藏的 java 項(xiàng)目和工具 某小公司RESTful、共用接口、前后端分離、接口約定的實(shí)踐 隨著互聯(lián)網(wǎng)高速發(fā)展,公司對(duì)項(xiàng)目開(kāi)發(fā)周期不斷縮短,我們面對(duì)各種需求,使用原有對(duì)接方式,各端已經(jīng)很...

    Kosmos 評(píng)論0 收藏0
  • Spring Boot Admin 2.1.0 全攻略

    摘要:并向注冊(cè)中心注冊(cè),注冊(cè)地址為,最后將的所有端口暴露出來(lái),配置如下在工程的啟動(dòng)類(lèi)加上注解,開(kāi)啟的功能,加上注解開(kāi)啟的功能。在啟動(dòng)類(lèi)加上注解,開(kāi)啟的功能。 轉(zhuǎn)載請(qǐng)標(biāo)明出處: https://www.fangzhipeng.com本文出自方志朋的博客 Spring Boot Admin簡(jiǎn)介 Spring Boot Admin是一個(gè)開(kāi)源社區(qū)項(xiàng)目,用于管理和監(jiān)控SpringBoot應(yīng)用程序。 ...

    TalkingData 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<