SSO(Single Sign On)單點登錄

SSO是在多個應用系統(tǒng)中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統(tǒng)。它包括可以將這次主要的登錄映射到其他應用中用于同一個用戶的登錄的機制。它是目前比較流行的企業(yè)業(yè)務(wù)整合的解決方案之一。
實現(xiàn)單點登錄系統(tǒng)慰于,提供服務(wù)接口。把session數(shù)據(jù)存放在redis唤衫。

1婆赠、單點登錄系統(tǒng)流程

image.png

2、實現(xiàn)流程

2.1佳励、用戶注冊

    /**
    *用戶注冊
    */
    public TaotaoResult createUser(TbUser user) {
        user.setUpdated(new Date());
        user.setCreated(new Date());
        //md5加密
        user.setPassword(DigestUtils.md5DigestAsHex(user.getPassword().getBytes()));
        userMapper.insert(user);
        return TaotaoResult.ok();
    }

2.2休里、用戶登錄

      /**
     * 用戶登錄
     */
    @Override
    public TaotaoResult userLogin(String username, String password) {
        
        TbUserExample example = new TbUserExample();
        Criteria criteria = example.createCriteria();
        criteria.andUsernameEqualTo(username);
        List<TbUser> list = userMapper.selectByExample(example);
        //如果沒有此用戶名
        if (null == list || list.size() == 0) {
            return TaotaoResult.build(400, "用戶名或密碼錯誤");
        }
        TbUser user = list.get(0);
        //比對密碼
        if (!DigestUtils.md5DigestAsHex(password.getBytes()).equals(user.getPassword())) {
            return TaotaoResult.build(400, "用戶名或密碼錯誤");
        }
        //生成token
        String token = UUID.randomUUID().toString();
        //保存用戶之前蛆挫,把用戶對象中的密碼清空。
        user.setPassword(null);
        //把用戶信息寫入redis
        jedisClient.set(REDIS_USER_SESSION_KEY + ":" + token, JsonUtils.objectToJson(user));
        //設(shè)置session的過期時間
        jedisClient.expire(REDIS_USER_SESSION_KEY + ":" + token, SSO_SESSION_EXPIRE);
        //把REDIS_USER_SESSION_KEY + ":" + token存進瀏覽器的cookie中(wzf),這樣用戶登錄相關(guān)的系統(tǒng)時妙黍,取得cookie中的值悴侵,然后在redis數(shù)據(jù)庫中進行查詢,如果結(jié)果存在拭嫁,則表明用戶已經(jīng)登錄畜挨。
        //返回token
        return TaotaoResult.ok(token);
    }

2.3、通過token查詢用戶信息
根據(jù)token判斷用戶是否登錄或者session是否過期噩凹。接收token,根據(jù)token到redis中取用戶信息毡咏。判斷token字符串是否對應用戶信息驮宴,如果不對應說明token非法或者session已過期。取到了說明用戶就是正常的登錄狀態(tài)呕缭。返回用戶信息堵泽,同時重置用戶的過期時間(用戶處于活動狀態(tài))。

  /**
  *通過token判斷session信息
  */
    public TaotaoResult getUserByToken(String token) {
        //根據(jù)token從redis中查詢用戶信息
        String json = jedisClient.get(REDIS_USER_SESSION_KEY + ":" + token);
        //判斷是否為空
        if (StringUtils.isBlank(json)) {
            return TaotaoResult.build(400, "此session已經(jīng)過期恢总,請重新登錄");
        }
        //更新過期時間
        jedisClient.expire(REDIS_USER_SESSION_KEY + ":" + token, SSO_SESSION_EXPIRE);
        //返回用戶信息
        return TaotaoResult.ok(JsonUtils.jsonToPojo(json, TbUser.class));
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末迎罗,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子片仿,更是在濱河造成了極大的恐慌纹安,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件砂豌,死亡現(xiàn)場離奇詭異厢岂,居然都是意外死亡,警方通過查閱死者的電腦和手機阳距,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門塔粒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人筐摘,你說我怎么就攤上這事卒茬。” “怎么了咖熟?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵圃酵,是天一觀的道長。 經(jīng)常有香客問我馍管,道長辜昵,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任咽斧,我火速辦了婚禮堪置,結(jié)果婚禮上躬存,老公的妹妹穿的比我還像新娘。我一直安慰自己舀锨,他們只是感情好岭洲,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著坎匿,像睡著了一般盾剩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上替蔬,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天告私,我揣著相機與錄音,去河邊找鬼承桥。 笑死驻粟,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的凶异。 我是一名探鬼主播蜀撑,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼剩彬!你這毒婦竟也來了酷麦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤喉恋,失蹤者是張志新(化名)和其女友劉穎沃饶,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體轻黑,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡绍坝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了苔悦。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片轩褐。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖玖详,靈堂內(nèi)的尸體忽然破棺而出把介,到底是詐尸還是另有隱情,我是刑警寧澤蟋座,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布拗踢,位于F島的核電站,受9級特大地震影響向臀,放射性物質(zhì)發(fā)生泄漏巢墅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望君纫。 院中可真熱鬧驯遇,春花似錦、人聲如沸蓄髓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽会喝。三九已至陡叠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間肢执,已是汗流浹背枉阵。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留预茄,地道東北人兴溜。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像反璃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子假夺,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容