springsecurity 企業(yè)微信登入的實現(xiàn)示例
背景
后臺系統(tǒng)需要接入 企業(yè)微信登入,滿足企業(yè)員工快速登入系統(tǒng)
流程圖
簡單代碼說明
自定義一套 springsecurity 認(rèn)證邏輯
主要就是 根據(jù)code 獲取綁定用戶信息 然后返回登入 token ,和qq ,微信 等第 3方登入 一個套路
// 自定義 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); ? ? ? ? // 此時鑒權(quán)成功后,應(yīng)當(dāng)重新 new 一個擁有鑒權(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è)微信登入的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)springsecurity 企業(yè)微信登入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解rabbitmq創(chuàng)建queue時arguments參數(shù)注釋
這篇文章主要介紹了rabbitmq創(chuàng)建queue時arguments參數(shù)注釋,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-03-03SpringBoot結(jié)合SpringSecurity實現(xiàn)圖形驗證碼功能
這篇文章主要介紹了SpringBoot + SpringSecurity 實現(xiàn)圖形驗證碼功能,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05淺談java中異常拋出后代碼是否會繼續(xù)執(zhí)行
這篇文章主要給大家介紹了java中異常拋出后代碼是否會繼續(xù)執(zhí)行,文章通過幾種情況的代碼示例給大家詳細(xì)分析了這個情況,有需要的朋友們可以參考借鑒,下面來一起看看吧。2016-10-10Java的JSON轉(zhuǎn)換類庫GSON的基礎(chǔ)使用教程
GSON是谷歌開源的一款Java對象與JSON對象互相轉(zhuǎn)換的類庫,Java的JSON轉(zhuǎn)換類庫GSON的基礎(chǔ)使用教程,需要的朋友可以參考下2016-06-06Java組件FileUpload上傳文件實現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了Java組件FileUpload上傳文件實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-06-06