电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Spring Security OAuth2 實現登錄互踢的示例代碼

瀏覽:98日期:2023-09-07 10:39:38

本文主要介紹了Spring Security OAuth2 實現登錄互踢的示例代碼,分享給大家,具體如下:

Spring Security OAuth2 實現登錄互踢的示例代碼

背景說明

一個賬號只能一處登錄,類似的業務需求在現有后管類系統是非常常見的。 但在原有的 spring security oauth2 令牌方法流程(所謂的登錄)無法滿足類似的需求。

我們先來看 TokenEndpoint 的方法流程

客戶端 帶參訪問 /oauth/token 接口,最后去調用 TokenGranter

Spring Security OAuth2 實現登錄互踢的示例代碼

TokenGranter 根據不同的授權類型,獲取用戶認證信息 并去調用TokenServices 生成令牌

Spring Security OAuth2 實現登錄互踢的示例代碼

重新 TokenService

重寫發放邏輯createAccessToken,當用戶管理的令牌存在時則刪除重新創建,這樣會導致之前登陸獲取的token 失效,順理成章的被擠掉。

@Transactional public OAuth2AccessToken createAccessToken(OAuth2Authentication authentication) throws AuthenticationException { OAuth2AccessToken existingAccessToken = tokenStore.getAccessToken(authentication); OAuth2RefreshToken refreshToken = null; // 重寫此處,當用戶關聯的token 存在時,刪除原有令牌 if (existingAccessToken != null) { tokenStore.removeAccessToken(existingAccessToken); } else if (refreshToken instanceof ExpiringOAuth2RefreshToken) { ExpiringOAuth2RefreshToken expiring = (ExpiringOAuth2RefreshToken) refreshToken; if (System.currentTimeMillis() > expiring.getExpiration().getTime()) {refreshToken = createRefreshToken(authentication); } } OAuth2AccessToken accessToken = createAccessToken(authentication, refreshToken); tokenStore.storeAccessToken(accessToken, authentication); // In case it was modified refreshToken = accessToken.getRefreshToken(); if (refreshToken != null) { tokenStore.storeRefreshToken(refreshToken, authentication); } return accessToken; }

重寫 Token key 生成邏輯

如上代碼,我們實現用戶單一終端的唯一性登錄,什么是單一終端 我們可以類比 QQ 登錄 移動端和 PC 端可以同時登錄,但 移動端 和移動端不能同時在線。

如何能夠實現 在不同客戶端也能夠唯一性登錄呢?

先來看上文源碼 `OAuth2AccessToken existingAccessToken=tokenStore.getAccessToken(authentication);

是如何根據用戶信息判斷 token 存在的呢?

public OAuth2AccessToken getAccessToken(OAuth2Authentication authentication) { String key = authenticationKeyGenerator.extractKey(authentication); // redis 查詢邏輯,根據 key return accessToken; }

AuthenticationKeyGenerator key值生成器 默認情況下根據 username/clientId/scope 參數組合生成唯一token

public String extractKey(OAuth2Authentication authentication) { Map<String, String> values = new LinkedHashMap<String, String>(); OAuth2Request authorizationRequest = authentication.getOAuth2Request(); if (!authentication.isClientOnly()) { values.put(USERNAME, authentication.getName()); } values.put(CLIENT_ID, authorizationRequest.getClientId()); if (authorizationRequest.getScope() != null) { values.put(SCOPE, OAuth2Utils.formatParameterList(new TreeSet<String>(authorizationRequest.getScope()))); } return generateKey(values);}

若想實現,多終端的唯一性登錄,只需要使得同一個用戶在多個終端生成的 token 一致,加上上文提到的 createToken 修改邏輯,既去掉extractKey 的 clientId 條件,不區分終端即可

public String extractKey(OAuth2Authentication authentication) { Map<String, String> values = new LinkedHashMap<String, String>(); OAuth2Request authorizationRequest = authentication.getOAuth2Request(); if (!authentication.isClientOnly()) { values.put(USERNAME, authentication.getName()); } if (authorizationRequest.getScope() != null) { values.put(SCOPE, OAuth2Utils.formatParameterList(new TreeSet<String>(authorizationRequest.getScope()))); } return generateKey(values);}

最后在 authserver 中注入新的 TokenService 即可

到此這篇關于Spring Security OAuth2 實現登錄互踢的示例代碼的文章就介紹到這了,更多相關Spring Security OAuth2 登錄互踢內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 中空玻璃生产线,玻璃加工设备,全自动封胶线,铝条折弯机,双组份打胶机,丁基胶/卧式/立式全自动涂布机,玻璃设备-山东昌盛数控设备有限公司 | 双效节能浓缩器-热回流提取浓缩机组-温州市利宏机械 | 天津力值检测-天津管道检测-天津天诚工程检测技术有限公司 | 超声骨密度仪-动脉硬化检测仪器-人体成分分析仪厂家/品牌/价格_南京科力悦 | 杭州画室_十大画室_白墙画室_杭州美术培训_国美附中培训_附中考前培训_升学率高的画室_美术中考集训美术高考集训基地 | 拉伸膜,PE缠绕膜,打包带,封箱胶带,包装膜厂家-东莞宏展包装 | 压力变送器-上海武锐自动化设备有限公司 | 沈阳网站建设_沈阳网站制作_沈阳网页设计-做网站就找示剑新零售 沈阳缠绕膜价格_沈阳拉伸膜厂家_沈阳缠绕膜厂家直销 | 橡胶弹簧|复合弹簧|橡胶球|振动筛配件-新乡市永鑫橡胶厂 | 新材料分散-高速均质搅拌机-超声波分散混合-上海化烁智能设备有限公司 | 并离网逆变器_高频UPS电源定制_户用储能光伏逆变器厂家-深圳市索克新能源 | 武汉画册印刷厂家-企业画册印刷-画册设计印刷制作-宣传画册印刷公司 - 武汉泽雅印刷厂 | 档案密集柜_手动密集柜_智能密集柜_内蒙古档案密集柜-盛隆柜业内蒙古密集柜直销中心 | 高效复合碳源-多核碳源生产厂家-污水处理反硝化菌种一长隆科技库巴鲁 | 网优资讯-为循环资源、大宗商品、工业服务提供资讯与行情分析的数据服务平台 | Maneurop/美优乐压缩机,活塞压缩机,型号规格,技术参数,尺寸图片,价格经销商 | 铸钢件厂家-铸钢齿轮-减速机厂家-淄博凯振机械有限公司 | 丝杆升降机-不锈钢丝杆升降机-非标定制丝杆升降机厂家-山东鑫光减速机有限公司 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 济南电缆桥架|山东桥架-济南航丰实业有限公司 | 电动葫芦-河北悍象起重机械有限公司 | 搬运设备、起重设备、吊装设备—『龙海起重成套设备』 | 工业车间焊接-整体|集中除尘设备-激光|等离子切割机配套除尘-粉尘烟尘净化治理厂家-山东美蓝环保科技有限公司 | 单级/双级旋片式真空泵厂家,2xz旋片真空泵-浙江台州求精真空泵有限公司 | 蒸汽吸附分析仪-进口水分活度仪|康宝百科 | 建大仁科-温湿度变送器|温湿度传感器|温湿度记录仪_厂家_价格-山东仁科 | 青岛代理记账_青岛李沧代理记账公司_青岛崂山代理记账一个月多少钱_青岛德辉财税事务所官网 | 猎头招聘_深圳猎头公司_知名猎头公司| pbootcms网站模板|织梦模板|网站源码|jquery建站特效-html5模板网 | 诺冠气动元件,诺冠电磁阀,海隆防爆阀,norgren气缸-山东锦隆自动化科技有限公司 | 刚性-柔性防水套管-橡胶伸缩接头-波纹管补偿器-启腾供水材料有限公司 | 锂电池生产厂家-电动自行车航模无人机锂电池定制-世豹新能源 | 真空干燥烘箱_鼓风干燥箱 _高低温恒温恒湿试验箱_光照二氧化碳恒温培养箱-上海航佩仪器 | 等离子表面处理机-等离子表面活化机-真空等离子清洗机-深圳市东信高科自动化设备有限公司 | 十字轴_十字轴万向节_十字轴总成-南京万传机械有限公司 | 安徽泰科检测科技有限公司【官方网站】 | 双菱电缆-广州电缆厂_广州电缆厂有限公司 | 微量水分测定仪_厂家_卡尔费休微量水分测定仪-淄博库仑 | 二手光谱仪维修-德国OBLF光谱仪|进口斯派克光谱仪-热电ARL光谱仪-意大利GNR光谱仪-永晖检测 | 航空障碍灯_高中低光强航空障碍灯_民航许可认证航空警示灯厂家-东莞市天翔航天科技有限公司 | 铸铝门厂家,别墅大门庭院大门,别墅铸铝门铜门[十大品牌厂家]军强门业 |