-
controller: /** * 授权获取用户手机号 * * @param mobile * @param type * @return */ @PostMapping("/getPhone") @ApiOperation(value = "授权获取用户手机号", notes = "") public GlobalReponse getPhone(@RequestBody EncrypDataDTO encrypDataDTO) { Long userId = JwtUtil.getCurrentJwtUser().getId(); return userService.getPhone(userId, encrypDataDTO); } service接口: GlobalReponse getPhone(Long userId, EncrypDataDTO encrypDataDTO); service实现类: /** * 获取用户手机号 * SessionKey 当时是存入表里的,具体根据业务去存取 * @param userId * @return */ @Override public GlobalReponse getPhone(Long userId, EncrypDataDTO encrypDataDTO) { try { //去表里查询sessionkey SessionKey sessionKey = sessionKeyDao.createLambdaQuery().andEq(SessionKey::getUserId, userId).single(); if (sessionKey == null) { return GlobalReponse.fail("获取信息出错"); } AlgorithmParameterSpec ivSpec = new IvParameterSpec(Base64.decodeBase64(encrypDataDTO.getIv())); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); SecretKeySpec keySpec = new SecretKeySpec(Base64.decodeBase64(sessionKey.getSessionKey()), "AES"); cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec); String result = new String(cipher.doFinal(Base64.decodeBase64(encrypDataDTO.getEncrypdata())), StandardCharsets.UTF_8); JSONObject jsonObject = JSON.parseObject(result); String phone = (String) jsonObject.get("phoneNumber"); //查询该手机号是否存在站长里,如果存在,则绑定上站长,以小程序的user为准,同步后台新建的站长信息, // 站长详情表里的user_id管理也同步成小程序的,删除后台的站长user表 //拿手机号去站长详情里查询是否存在该手机号 Stationmaster sm = stationmasterDao.createLambdaQuery().andEq(Stationmaster::getPhone, phone).single(); //如果存在的话,则查出当前小程序的登录信息,在查出站长详情里的站长信息,将站长详情里的站长信息同步到小程序里,在执行删除 if (sm != null) { //当前登录的用户信息 User user = userDao.createLambdaQuery().andEq(User::getId, userId).single(); //站长详情里的关联的用户的id查出的用户信息 User smUser = userDao.createLambdaQuery().andEq(User::getId, sm.getUserId()).single(); //同步数据 user.setRole(3); user.setPhone(phone); user.setType(1); user.setStatus(0); user.setVipGrade(0); user.setScore(0); user.setTotalScore(0); user.setCreateTime(new Date()); user.setUpdateTime(new Date()); user.setRecommendId(0L); user.setAuth(-1); user.setUpdateTime(new Date()); //执行同步用户信息 userDao.updateTemplateById(user); //执行同步店长详情 sm.setUserId(user.getId()); sm.setUpdateTime(new Date()); stationmasterDao.updateTemplateById(sm); //执行删除原用户信息 userDao.deleteById(smUser.getId()); } else { User user = userDao.createLambdaQuery().andEq(User::getId, userId).single(); if (!CheckUtil.checkObjAllFieldsIsNull(user)) { user.setPhone(phone); userDao.updateTemplateById(user); } } //解析解密后的字符串 return GlobalReponse.success(); } catch (Exception e) { e.printStackTrace(); } return GlobalReponse.fail(); } 用到的参数: @Data @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode(callSuper = false) public class EncrypDataDTO { private String key;//sessionkey private String iv;//小程序传参 private String encrypdata;//小程序传参 }
springboot小程序授权登录获取用户手机号
最新推荐文章于 2024-06-16 10:17:03 发布