国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

單點登錄與消息隊列

Jioby / 883人閱讀

摘要:前言很久都沒有寫博客了,這次為大家簡單介紹兩個在開發中經常使用的概念單點登錄和消息隊列以及具體到中的一些實現方案。單點登錄的實質就是安全上下文或憑證在多個應用系統之間的傳遞或共享。

前言

很久都沒有寫博客了,這次為大家簡單介紹兩個在WEB開發中經常使用的概念——單點登錄和消息隊列以及具體到J2EE中的一些實現方案。本文原創性的工作比較少,主要是一些總結概括和自己的理解。

單點登錄SSO SSO的業務場景

所謂單點登錄就是在一個站點登錄之后可以授信給其他站點,這樣就可以做到一次登錄,到處操作。單點登錄的實質就是安全上下文(Security Context)或憑證(Credential)在多個應用系統之間的傳遞或共享。

大部分的網站采用Cookie作為登錄的一種簡單實現方案,在同一個一級域名下面,這樣做并無問題,不需要對各個子系統分別驗證。但是Cookie無法跨域傳遞。將用戶的登錄、憑證取得等解耦處理多帶帶作為一個子系統是合理的選擇。

SSO的核心要素

共享同一個身份認證系統,也就是說所有站點的身份驗證操作在同一個系統下完成

每個子系統從共同的身份認證系統中取得用戶憑證,包含用戶的身份、權限信息等

示意圖如下:

SSO的一種簡單實現方案

下面以采用Cookie的一種方案為例來解釋:

我們首先定義授信服務器A,受信服務器B,客戶C;當前的業務是B需要驗證C的身份。需要注意的是B和C都會保有session來記錄C的登錄狀態,均會向C 的Header中寫入對應自己域名的Cookie以存儲憑證信息。Cookie中含有tokenId來標示C,也就是說對于A和B他們的Cookie中對應于同一個C,其tokenId應該一致。

C向B發起請求后,會有以下幾種情形:

B含有session,C含有Cookie,且session和Cookie中的token一致,那么不需要向A求助

C中對于B無Cookie或Cookie過期或session與Cookie不一致,將向A發起請求。之后根據A的情形,有以下情況:

A中session與C中Cookie的token一致,重新生成憑證信息返回給B,B重新寫入Cookie與session

A中Cookie過期或信息不一致,將重定向到登錄頁面

對于登錄情形,A將更新Cookie與session,然后C再向B發起請求,這時就會變成2中第一種情況,導致A和B的信息完成同步。

消息隊列 MQ的業務場景

消息隊列本身是簡單的,可以直接看做一個隊列,重點是如何定義存儲在隊列中的數據格式,以滿足我們對應的操作需求。MQ常常應用于那些并發量大而對于實時性要求不高的情況。舉個例子,比如一個用戶量較大的社交網站的評論發布,為什么這么說呢?對于這個任務,隊列中只用存儲評論相關信息,對于從隊列中取的一方,只需要進行插入操作,符合前面所說的并發量大且可以有延時,同時并不難實現。

MQ的兩種模式

消息隊列在WEB開發中主要有兩種模式:

生產者/消費者模式:對于一則消息,只有一個消費者線程會去處理它,適用于我們上面所說的評論系統

發布者/訂閱者模式:對于所有訂閱者,它可以讀取所有在它加入之后發布的消息

在J2EE中加入消息隊列,我個人認為應該是這樣的:對于特定的HTTP請求,調用生產者/發布者的接口,入隊必要消息,這個并不困難。大有蹊蹺的我覺得在于處理消息的一方,可以實現listener將其交由容器管理,也可以自己開辟池來調度。舉例來說明,對于前者Spring-redis實現的pub/sub模式隊列就是直接在配置文件中設定RedisListener的實現類,對于后者,你可以直接獨立出來寫離線腳本來監聽隊列。

MQ的實現方案

目前業界有比較成熟的MQ解決產品,如下:

RabbitMQ

ActiveMQ

kafka

Redis

MQ的Spring+Redis實現簡單示例

在Pom.xml中加入以下依賴

    
        org.springframework.data
        spring-data-redis
        1.4.2.RELEASE
    
    
        org.apache.commons
        commons-pool2
        2.3
    
    
        redis.clients
        jedis
        2.6.2
     

在ApplicationContext.xml的頭部插入schema

xmlns:redis="http://www.springframework.org/schema/redis"

在ApplicationContext中加入Redis的配置

    
    
        
        
        
        
    


    
    
        
        
        
        

    
    
        
            
    
    

    
         
        
         
    
    
    
        
    
               

上文在定義Listener的時候采用了注解對象作為實現類,也可以手動在配置文件中再寫一個bean,如下

    

最后我們給出一個接收方的實現

import java.io.Serializable;

import org.springframework.stereotype.Component;

@Component(value="messageDelegateListener")
public class ListenMessage {
    public void handleMessage(Serializable message){
        System.out.println(message);
    }
}

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64540.html

相關文章

  • 消息系統設計實現「上篇」

    摘要:原文鏈接消息系統設計與實現上篇由于文章篇幅較長,而作者精力有限,不希望這么早就精盡人亡,故分成上下篇來寫消息系統的設計與實現。更新于關聯文章消息系統設計與實現下篇如果本文對您有用請不要吝嗇你們的與這會大大支持我們繼續創作 原文鏈接:Bluesun | 消息系統設計與實現「上篇」 由于文章篇幅較長,而作者精力有限,不希望這么早就精盡人亡,故分成上下篇來寫消息系統的設計與實現。上篇主要講...

    v1 評論0 收藏0
  • 《大型網站系統Java中間件》讀書筆記(上)

    摘要:另一個用戶請求過來,負載均衡器指派這個請求到服務器。這樣就平攤了請求這種方式就叫做輪詢策略還有很多種,就看你想怎么實現了,反正這個邏輯的代碼放在負載均衡器上。 前言 只有光頭才能變強。文本已收錄至我的GitHub倉庫,歡迎Star:https://github.com/ZhongFuCheng3y/3y 這本書買了一段時間了,之前在杭州沒帶過去,現在讀完第三章,來做做筆記 showI...

    baukh789 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<