spring boot oauth2單點登錄(四)code存儲方式

相關(guān)文章

1教翩、spring boot oauth2單點登錄(一)-前后端分離例子
2笔咽、spring boot oauth2單點登錄(二)-客戶端信息存儲
3、spring boot oauth2單點登錄(三)-token存儲方式
4沿量、spring boot oauth2單點登錄(四)-code存儲方式

源碼地址

后端:https://gitee.com/fengchangxin/sso
前端:https://gitee.com/fengchangxin/sso-page

準備

后端:三個spring boot應(yīng)用颂砸,auth(授權(quán)管理)羡洁,client1(客戶端應(yīng)用1),client2(客戶端應(yīng)用2)苛蒲。
前端:三個Vue項目卤橄,auth,client1臂外,client2窟扑。分別對應(yīng)三個后端應(yīng)用。
工具:nginx
域名:oauth.com漏健,client1.com嚎货,client2.com,分別對應(yīng)三個系統(tǒng)蔫浆。
開發(fā)環(huán)境:先在host文件添加上面三個域名殖属。
端口:
后端服務(wù)auth(8080),client1(8081)瓦盛,client2(8082)忱辅。
前端auth(8083)七蜘,client1(8084),client2(8085)墙懂。
依賴:

<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-oauth2</artifactId>
</dependency>

測試地址:
client1:http://client1.com/client1Page/#/home
client2:http://client2.com/client2Page/#/home
登錄用戶:admin/123456

備注:此篇文章對應(yīng)的授權(quán)管理應(yīng)用:auth-code

授權(quán)碼code存儲

框架默認存儲在內(nèi)存(InMemoryAuthorizationCodeServices)橡卤,單機應(yīng)用沒問題,若應(yīng)用是集群部署损搬,就可能會出現(xiàn)問題碧库。而框架已經(jīng)提供了兩種實現(xiàn)方式:內(nèi)存(InMemoryAuthorizationCodeServices),數(shù)據(jù)庫(JdbcAuthorizationCodeServices)巧勤。

1.1數(shù)據(jù)庫存儲(JdbcAuthorizationCodeServices)

首先先建好oauth_code表嵌灰,然后在AuthorizationServerEndpointsConfigurer配置就可以了,注意的是在測試時oauth_code的數(shù)據(jù)再驗證完之后會被刪除颅悉,當看到表中沒數(shù)據(jù)時并不是配置不生效沽瞭,而是被刪除了,可以debug來跟蹤剩瓶。

    @Autowired
    private DataSource dataSource;
    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints.tokenStore(new RedisTokenStore(redisConnectionFactory));
        endpoints.authorizationCodeServices(new JdbcAuthorizationCodeServices(dataSource));
    }

1.2自定義

如果不想存在數(shù)據(jù)庫驹溃,或者不想用默認的數(shù)據(jù)庫表,那也可以繼承RandomValueAuthorizationCodeServices類延曙,來實現(xiàn)自定義豌鹤。例如下面例子使用Redis來存儲:

@Service
public class CodeStoreService extends RandomValueAuthorizationCodeServices {
    @Autowired
    private RedisTemplate redisTemplate;
    private static final String CODE_KEY = "auth:code:%s";

    /**
     * 存儲code
     *
     * @param code
     * @param authentication
     */
    @Override
    protected void store(String code, OAuth2Authentication authentication) {
        String key = String.format(CODE_KEY, code);
        System.out.println("保存code:" + code);
        //保存30分鐘
        redisTemplate.opsForValue().set(key, SerializationUtils.serialize(authentication), 30, TimeUnit.MINUTES);
    }

    /**
     * 刪除code
     *
     * @param code
     * @return
     */
    @Override
    protected OAuth2Authentication remove(String code) {
        String key = String.format(CODE_KEY, code);
        Object value = redisTemplate.opsForValue().get(key);
        if (value != null) {
            System.out.println("刪除code:" + code);
            redisTemplate.delete(key);
            return SerializationUtils.deserialize((byte[]) value);
        }
        return null;
    }
}

在AuthorizationServerEndpointsConfigurer配置自定義類。

    //redis存儲
    @Autowired
    private CodeStoreService codeStoreService;
    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints.tokenStore(new RedisTokenStore(redisConnectionFactory));
        endpoints.authorizationCodeServices(codeStoreService);
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末枝缔,一起剝皮案震驚了整個濱河市布疙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌愿卸,老刑警劉巖灵临,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異趴荸,居然都是意外死亡俱诸,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門赊舶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來睁搭,“玉大人,你說我怎么就攤上這事笼平≡奥妫” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵寓调,是天一觀的道長锌唾。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么晌涕? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任滋捶,我火速辦了婚禮,結(jié)果婚禮上余黎,老公的妹妹穿的比我還像新娘重窟。我一直安慰自己,他們只是感情好惧财,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布巡扇。 她就那樣靜靜地躺著,像睡著了一般垮衷。 火紅的嫁衣襯著肌膚如雪厅翔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天搀突,我揣著相機與錄音刀闷,去河邊找鬼。 笑死仰迁,一個胖子當著我的面吹牛甸昏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播轩勘,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼筒扒,長吁一口氣:“原來是場噩夢啊……” “哼怯邪!你這毒婦竟也來了绊寻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤悬秉,失蹤者是張志新(化名)和其女友劉穎澄步,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體和泌,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡村缸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了武氓。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梯皿。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖县恕,靈堂內(nèi)的尸體忽然破棺而出东羹,到底是詐尸還是另有隱情,我是刑警寧澤忠烛,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布属提,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏冤议。R本人自食惡果不足惜斟薇,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望恕酸。 院中可真熱鬧堪滨,春花似錦、人聲如沸尸疆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽寿弱。三九已至犯眠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間症革,已是汗流浹背筐咧。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留噪矛,地道東北人量蕊。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像艇挨,于是被迫代替她去往敵國和親残炮。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345