springsecurity 企業(yè)微信登入的實(shí)現(xiàn)示例
背景
后臺(tái)系統(tǒng)需要接入 企業(yè)微信登入,滿足企業(yè)員工快速登入系統(tǒng)
流程圖
簡(jiǎn)單代碼說明
自定義一套 springsecurity 認(rèn)證邏輯
主要就是 根據(jù)code 獲取綁定用戶信息 然后返回登入 token ,和qq ,微信 等第 3方登入 一個(gè)套路
// 自定義 WeChatAuthenticationProvider public class WeChatAuthenticationProvider ?implements AuthenticationProvider { ? ? private UserDetailsService userDetailsService; ? ? public WeChatAuthenticationProvider(UserDetailsService userDetailsService){ ? ? ? ? this.userDetailsService = userDetailsService; ? ? } ? ? @Override ? ? public Authentication authenticate(Authentication authentication) throws AuthenticationException { ? ? ? ? WeChatAuthenticationToken authenticationToken = (WeChatAuthenticationToken) authentication; ? ? ? ? String userId = (String) authenticationToken.getPrincipal(); ? ? ? ? UserDetails userDetails = userDetailsService.loadUserByUsername(userId); ? ? ? ? // 此時(shí)鑒權(quán)成功后,應(yīng)當(dāng)重新 new 一個(gè)擁有鑒權(quán)的 authenticationResult 返回 ? ? ? ? BrowserAuthenticationToken authenticationResult = new BrowserAuthenticationToken(userDetails, userDetails.getAuthorities()); ? ? ? ? authenticationResult.setDetails(authenticationToken.getDetails()); ? ? ? ? return authenticationResult; ? ? } ? ? @Override ? ? public boolean supports(Class<?> authentication) { ? ? ? ? // 判斷 authentication 是不是 SmsCodeAuthenticationToken 的子類或子接口 ? ? ? ? return WeChatAuthenticationToken.class.isAssignableFrom(authentication); ? ? } ? ? public UserDetailsService getUserDetailsService() { ? ? ? ? return userDetailsService; ? ? } ? ? public void setUserDetailsService(UserDetailsService userDetailsService) { ? ? ? ? this.userDetailsService = userDetailsService; ? ? } } // 重寫 UserDetailsService ? ? @Override ? ? public UserDetails loadUserByUsername(String code) throws UsernameNotFoundException { ? ? ? ? String weChatUserId = weChatService.getWeChatUserId(code); ? ? ? ? LambdaQueryWrapper<SysUserWechat> lambda = new QueryWrapper<SysUserWechat>().lambda(); ? ? ? ? lambda.eq(SysUserWechat::getDeleted, DataStatusEnum.NORMAL.getCode()); ? ? ? ? lambda.eq(SysUserWechat::getWechatId,weChatUserId); ? ? ? ? List<SysUserWechat> sysUserWechats = sysUserWechatService.list(lambda); ? ? ? ? if(CollectionUtils.isEmpty(sysUserWechats)){ ? ? ? ? ? ? throw new ServiceException(GOOGLE_AUTHENTICATOR_601001.getMsg(),GOOGLE_AUTHENTICATOR_601001.getCode()); ? ? ? ? } ? ? ? ? SysUserWechat sysUserWechat = sysUserWechats.get(0); ? ? ? ? Long sysUserId = sysUserWechat.getSysUserId(); ? ? ? ? SysUser sysUser = userService.selectUserById(sysUserId); ? ? ? ? if (StringUtils.isNull(sysUser)) { ? ? ? ? ? ? throw new ServiceException(GOOGLE_AUTHENTICATOR_601001.getMsg(),GOOGLE_AUTHENTICATOR_501001.getCode()); ? ? ? ? } ? ? ? ? if (UserStatus.DELETED.getCode().equals(sysUser.getDelFlag())) { ? ? ? ? ? ? throw new ServiceException(GOOGLE_AUTHENTICATOR_601001.getMsg(),GOOGLE_AUTHENTICATOR_501001.getCode()); ? ? ? ? } ? ? ? ? if (UserStatus.DISABLE.getCode().equals(sysUser.getStatus())) { ? ? ? ? ? ? throw new ServiceException(GOOGLE_AUTHENTICATOR_601001.getMsg(),GOOGLE_AUTHENTICATOR_501001.getCode()); ? ? ? ? } ? ? ? ? return createLoginUser(sysUser); ? ? }
到此這篇關(guān)于springsecurity 企業(yè)微信登入的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)springsecurity 企業(yè)微信登入內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- mall整合SpringSecurity及JWT認(rèn)證授權(quán)實(shí)戰(zhàn)下
- mall整合SpringSecurity及JWT實(shí)現(xiàn)認(rèn)證授權(quán)實(shí)戰(zhàn)
- SpringSecurity框架簡(jiǎn)介及與shiro特點(diǎn)對(duì)比
- SpringBoot整合SpringSecurityOauth2實(shí)現(xiàn)鑒權(quán)動(dòng)態(tài)權(quán)限問題
- Java SpringSecurity+JWT實(shí)現(xiàn)登錄認(rèn)證
- SpringSecurity微服務(wù)實(shí)戰(zhàn)之公共模塊詳解
相關(guān)文章
詳解rabbitmq創(chuàng)建queue時(shí)arguments參數(shù)注釋
這篇文章主要介紹了rabbitmq創(chuàng)建queue時(shí)arguments參數(shù)注釋,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03指定springboot的jar運(yùn)行內(nèi)存方式
這篇文章主要介紹了指定springboot的jar運(yùn)行內(nèi)存方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02SpringBoot結(jié)合SpringSecurity實(shí)現(xiàn)圖形驗(yàn)證碼功能
這篇文章主要介紹了SpringBoot + SpringSecurity 實(shí)現(xiàn)圖形驗(yàn)證碼功能,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-05-05淺談java中異常拋出后代碼是否會(huì)繼續(xù)執(zhí)行
這篇文章主要給大家介紹了java中異常拋出后代碼是否會(huì)繼續(xù)執(zhí)行,文章通過幾種情況的代碼示例給大家詳細(xì)分析了這個(gè)情況,有需要的朋友們可以參考借鑒,下面來一起看看吧。2016-10-10Java的JSON轉(zhuǎn)換類庫GSON的基礎(chǔ)使用教程
GSON是谷歌開源的一款Java對(duì)象與JSON對(duì)象互相轉(zhuǎn)換的類庫,Java的JSON轉(zhuǎn)換類庫GSON的基礎(chǔ)使用教程,需要的朋友可以參考下2016-06-06Java組件FileUpload上傳文件實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了Java組件FileUpload上傳文件實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-06-06Java讀取txt文件和寫入txt文件的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)硪黄狫ava讀取txt文件和寫入txt文件的簡(jiǎn)單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-11-11通過實(shí)例解析Spring Ioc項(xiàng)目實(shí)現(xiàn)過程
這篇文章主要介紹了Spring Ioc項(xiàng)目實(shí)踐過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06