美文网首页Spring Cloud
springsecurity 企业微信登入

springsecurity 企业微信登入

作者: 川流不息attitude | 来源:发表于2022-02-07 16:59 被阅读0次

springsecurity 企业微信登入

背景 后台系统需要接入 企业微信登入,满足企业员工快速登入系统

  1. 流程图
image.png
  1. 简单代码说明

    自定义一套 springsecurity 认证逻辑

    • 主要就是 根据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);
    
            // 此时鉴权成功后,应当重新 new 一个拥有鉴权的 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);
        }
    

相关文章

  • springsecurity 企业微信登入

    springsecurity 企业微信登入 背景 后台系统需要接入 企业微信登入,满足企业员工快速登入系统 流程图...

  • 企业微信进入方式

    为保证会议质量,尽量从企业微信App登入! 首先,每个人都下载好企业微信:1、打开手机或电脑桌面企业微信 2、从“...

  • 设计模式-单例模式

    介绍 实际运用 例如一个嵌入到微信的项目,里面有这微信登入、微信分享文章、微信获取位置等功能。那么用到微信登入这个...

  • 比特猪Nour与华登区块狗的区别

    微信:E_An-33 1-【登入方式的区别】 狗 的每次登入都要搞账号密码,验证码很烦人。 猪 能记住账号密,登入...

  • 使用微信登入退出的时候应用闪屏

    项目中集成了微信登入,从微信登入界面退出或者侧滑退出的时候,屏幕会先变黑然后在变成正常。用之前公司的侧滑退出的时候...

  • 豁然开朗

    昨天正式开通工号,算是正式入职了。 加入了不同的工作微信群,企业微信群。 面对微信和企业微信不断弹出的消息,不同的...

  • 微信登入界面解析

    画面上只有两个物体:地球,一个小人的背影。 小人站在月球上?而且还没有死,说明小人具备不需要呼吸这样最起码的超能力...

  • 企业微信对接企业自建应用(小程序、h5登陆认证)

    企业微信与自建h5应用和小程序对接 1.企业微信对接h5 网页授权登登陆链接 https://open.we...

  • 简书,我来啦

    关注简书这个平台有两个月啦,从一开始的朋友推荐,下载后偶尔登入,到如今习惯性登入。(现在微信,微博,简书是三大必登...

  • 第三方登入例子-GitHub授权登入(node-koa)

    前言 第三方登入太常见了,微信,微博,QQ...总有一个你用过。当然看这篇文章的你,应该还用过github登入。这...

网友评论

    本文标题:springsecurity 企业微信登入

    本文链接:https://www.haomeiwen.com/subject/zeimkrtx.html