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-02
SpringBoot結(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-10
Java的JSON轉(zhuǎn)換類庫GSON的基礎(chǔ)使用教程
GSON是谷歌開源的一款Java對(duì)象與JSON對(duì)象互相轉(zhuǎn)換的類庫,Java的JSON轉(zhuǎn)換類庫GSON的基礎(chǔ)使用教程,需要的朋友可以參考下2016-06-06
Java組件FileUpload上傳文件實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了Java組件FileUpload上傳文件實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-06-06
Java讀取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

