From c34fc83655b146b40802e1fce22db37b7367c83d Mon Sep 17 00:00:00 2001 From: Houjie <714924425@qq.com> Date: 星期一, 30 六月 2025 09:23:12 +0800 Subject: [PATCH] 企业微信登录 --- lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDictServiceImpl.java | 2 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppDingtalkServiceImpl.java | 2 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/ThirdLoginController.java | 611 +++++++++++++++++++++++++++--------------------------- 3 files changed, 309 insertions(+), 306 deletions(-) diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/ThirdLoginController.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/ThirdLoginController.java index 19fa754..4177e41 100644 --- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/ThirdLoginController.java +++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/ThirdLoginController.java @@ -45,26 +45,26 @@ @RequestMapping("/sys/thirdLogin") @Slf4j public class ThirdLoginController { - @Autowired - private ISysUserService sysUserService; - @Autowired - private ISysThirdAccountService sysThirdAccountService; + @Autowired + private ISysUserService sysUserService; + @Autowired + private ISysThirdAccountService sysThirdAccountService; - @Autowired - private BaseCommonService baseCommonService; - @Autowired + @Autowired + private BaseCommonService baseCommonService; + @Autowired private RedisUtil redisUtil; - @Autowired - private AuthRequestFactory factory; + @Autowired + private AuthRequestFactory factory; - @Autowired - ThirdAppConfig thirdAppConfig; - @Autowired - private ThirdAppWechatEnterpriseServiceImpl thirdAppWechatEnterpriseService; - @Autowired - private ThirdAppDingtalkServiceImpl thirdAppDingtalkService; + @Autowired + ThirdAppConfig thirdAppConfig; + @Autowired + private ThirdAppWechatEnterpriseServiceImpl thirdAppWechatEnterpriseService; + @Autowired + private ThirdAppDingtalkServiceImpl thirdAppDingtalkService; - @RequestMapping("/render/{source}") + @RequestMapping("/render/{source}") public void render(@PathVariable("source") String source, HttpServletResponse response) throws IOException { log.info("绗笁鏂圭櫥褰曡繘鍏ender锛�" + source); AuthRequest authRequest = factory.get(source); @@ -73,279 +73,283 @@ response.sendRedirect(authorizeUrl); } - @RequestMapping("/{source}/callback") - public String loginThird(@PathVariable("source") String source, AuthCallback callback,ModelMap modelMap) { - log.info("绗笁鏂圭櫥褰曡繘鍏allback锛�" + source + " params锛�" + JSONObject.toJSONString(callback)); + @RequestMapping("/{source}/callback") + public String loginThird(@PathVariable("source") String source, AuthCallback callback, ModelMap modelMap) { + log.info("绗笁鏂圭櫥褰曡繘鍏allback锛�" + source + " params锛�" + JSONObject.toJSONString(callback)); AuthRequest authRequest = factory.get(source); AuthResponse response = authRequest.login(callback); log.info(JSONObject.toJSONString(response)); Result<JSONObject> result = new Result<JSONObject>(); - if(response.getCode()==2000) { + if (response.getCode() == 2000) { - JSONObject data = JSONObject.parseObject(JSONObject.toJSONString(response.getData())); - String username = data.getString("username"); - String avatar = data.getString("avatar"); - String uuid = data.getString("uuid"); - //鏋勯�犵涓夋柟鐧诲綍淇℃伅瀛樺偍瀵硅薄 - ThirdLoginModel tlm = new ThirdLoginModel(source, uuid, username, avatar); - //鍒ゆ柇鏈夋病鏈夎繖涓汉 - //update-begin-author:wangshuai date:20201118 for:淇敼鎴愭煡璇㈢涓夋柟璐︽埛琛� - LambdaQueryWrapper<SysThirdAccount> query = new LambdaQueryWrapper<SysThirdAccount>(); - query.eq(SysThirdAccount::getThirdUserUuid, uuid); - query.eq(SysThirdAccount::getThirdType, source); - List<SysThirdAccount> thridList = sysThirdAccountService.list(query); - SysThirdAccount user = null; - if(thridList==null || thridList.size()==0) { - //鍚﹀垯鐩存帴鍒涘缓鏂拌处鍙� - user = sysThirdAccountService.saveThirdUser(tlm); - }else { - //宸插瓨鍦� 鍙缃敤鎴峰悕 涓嶈缃ご鍍� - user = thridList.get(0); - } - // 鐢熸垚token - //update-begin-author:wangshuai date:20201118 for:浠庣涓夋柟鐧诲綍鏌ヨ鏄惁瀛樺湪鐢ㄦ埛id锛屼笉瀛樺湪缁戝畾鎵嬫満鍙� - if(oConvertUtils.isNotEmpty(user.getSysUserId())) { - String sysUserId = user.getSysUserId(); - SysUser sysUser = sysUserService.getById(sysUserId); - String token = saveToken(sysUser); - modelMap.addAttribute("token", token); - }else{ - modelMap.addAttribute("token", "缁戝畾鎵嬫満鍙�,"+""+uuid); - } - //update-end-author:wangshuai date:20201118 for:浠庣涓夋柟鐧诲綍鏌ヨ鏄惁瀛樺湪鐢ㄦ埛id锛屼笉瀛樺湪缁戝畾鎵嬫満鍙� - //update-begin--Author:wangshuai Date:20200729 for锛氭帴鍙e湪绛惧悕鏍¢獙澶辫触鏃惰繑鍥炲け璐ョ殑鏍囪瘑鐮� issues#1441-------------------- - }else{ - modelMap.addAttribute("token", "鐧诲綍澶辫触"); - } - //update-end--Author:wangshuai Date:20200729 for锛氭帴鍙e湪绛惧悕鏍¢獙澶辫触鏃惰繑鍥炲け璐ョ殑鏍囪瘑鐮� issues#1441-------------------- + JSONObject data = JSONObject.parseObject(JSONObject.toJSONString(response.getData())); + String username = data.getString("username"); + String avatar = data.getString("avatar"); + String uuid = data.getString("uuid"); + //鏋勯�犵涓夋柟鐧诲綍淇℃伅瀛樺偍瀵硅薄 + ThirdLoginModel tlm = new ThirdLoginModel(source, uuid, username, avatar); + //鍒ゆ柇鏈夋病鏈夎繖涓汉 + //update-begin-author:wangshuai date:20201118 for:淇敼鎴愭煡璇㈢涓夋柟璐︽埛琛� + LambdaQueryWrapper<SysThirdAccount> query = new LambdaQueryWrapper<SysThirdAccount>(); + query.eq(SysThirdAccount::getThirdUserUuid, uuid); + query.eq(SysThirdAccount::getThirdType, source); + List<SysThirdAccount> thridList = sysThirdAccountService.list(query); + SysThirdAccount user = null; + if (thridList == null || thridList.size() == 0) { + //鍚﹀垯鐩存帴鍒涘缓鏂拌处鍙� + user = sysThirdAccountService.saveThirdUser(tlm); + } else { + //宸插瓨鍦� 鍙缃敤鎴峰悕 涓嶈缃ご鍍� + user = thridList.get(0); + } + // 鐢熸垚token + //update-begin-author:wangshuai date:20201118 for:浠庣涓夋柟鐧诲綍鏌ヨ鏄惁瀛樺湪鐢ㄦ埛id锛屼笉瀛樺湪缁戝畾鎵嬫満鍙� + if (oConvertUtils.isNotEmpty(user.getSysUserId())) { + String sysUserId = user.getSysUserId(); + SysUser sysUser = sysUserService.getById(sysUserId); + String token = saveToken(sysUser); + modelMap.addAttribute("token", token); + } else { + modelMap.addAttribute("token", "缁戝畾鎵嬫満鍙�," + "" + uuid); + } + //update-end-author:wangshuai date:20201118 for:浠庣涓夋柟鐧诲綍鏌ヨ鏄惁瀛樺湪鐢ㄦ埛id锛屼笉瀛樺湪缁戝畾鎵嬫満鍙� + //update-begin--Author:wangshuai Date:20200729 for锛氭帴鍙e湪绛惧悕鏍¢獙澶辫触鏃惰繑鍥炲け璐ョ殑鏍囪瘑鐮� issues#1441-------------------- + } else { + modelMap.addAttribute("token", "鐧诲綍澶辫触"); + } + //update-end--Author:wangshuai Date:20200729 for锛氭帴鍙e湪绛惧悕鏍¢獙澶辫触鏃惰繑鍥炲け璐ョ殑鏍囪瘑鐮� issues#1441-------------------- result.setSuccess(false); result.setMessage("绗笁鏂圭櫥褰曞紓甯�,璇疯仈绯荤鐞嗗憳"); return "thirdLogin"; } - /** - * 鍒涘缓鏂拌处鍙� - * @param model - * @return - */ - @PostMapping("/user/create") - @ResponseBody - public Result<String> thirdUserCreate(@RequestBody ThirdLoginModel model) { - log.info("绗笁鏂圭櫥褰曞垱寤烘柊璐﹀彿锛�" ); - Result<String> res = new Result<>(); - Object operateCode = redisUtil.get(CommonConstant.THIRD_LOGIN_CODE); - if(operateCode==null || !operateCode.toString().equals(model.getOperateCode())){ - res.setSuccess(false); - res.setMessage("鏍¢獙澶辫触"); - return res; - } - //鍒涘缓鏂拌处鍙� - //update-begin-author:wangshuai date:20201118 for:淇敼鎴愪粠绗笁鏂圭櫥褰曟煡鍑烘潵鐨剈ser_id锛屽湪鏌ヨ鐢ㄦ埛琛ㄥ敖琛宼oken - SysThirdAccount user = sysThirdAccountService.saveThirdUser(model); - if(oConvertUtils.isNotEmpty(user.getSysUserId())){ - String sysUserId = user.getSysUserId(); - SysUser sysUser = sysUserService.getById(sysUserId); - // 鐢熸垚token - String token = saveToken(sysUser); - //update-end-author:wangshuai date:20201118 for:淇敼鎴愪粠绗笁鏂圭櫥褰曟煡鍑烘潵鐨剈ser_id锛屽湪鏌ヨ鐢ㄦ埛琛ㄥ敖琛宼oken - res.setResult(token); - res.setSuccess(true); - } - return res; - } + /** + * 鍒涘缓鏂拌处鍙� + * + * @param model + * @return + */ + @PostMapping("/user/create") + @ResponseBody + public Result<String> thirdUserCreate(@RequestBody ThirdLoginModel model) { + log.info("绗笁鏂圭櫥褰曞垱寤烘柊璐﹀彿锛�"); + Result<String> res = new Result<>(); + Object operateCode = redisUtil.get(CommonConstant.THIRD_LOGIN_CODE); + if (operateCode == null || !operateCode.toString().equals(model.getOperateCode())) { + res.setSuccess(false); + res.setMessage("鏍¢獙澶辫触"); + return res; + } + //鍒涘缓鏂拌处鍙� + //update-begin-author:wangshuai date:20201118 for:淇敼鎴愪粠绗笁鏂圭櫥褰曟煡鍑烘潵鐨剈ser_id锛屽湪鏌ヨ鐢ㄦ埛琛ㄥ敖琛宼oken + SysThirdAccount user = sysThirdAccountService.saveThirdUser(model); + if (oConvertUtils.isNotEmpty(user.getSysUserId())) { + String sysUserId = user.getSysUserId(); + SysUser sysUser = sysUserService.getById(sysUserId); + // 鐢熸垚token + String token = saveToken(sysUser); + //update-end-author:wangshuai date:20201118 for:淇敼鎴愪粠绗笁鏂圭櫥褰曟煡鍑烘潵鐨剈ser_id锛屽湪鏌ヨ鐢ㄦ埛琛ㄥ敖琛宼oken + res.setResult(token); + res.setSuccess(true); + } + return res; + } - /** - * 缁戝畾璐﹀彿 闇�瑕佽缃瘑鐮� 闇�瑕佽蛋涓�閬嶆牎楠� - * @param json - * @return - */ - @PostMapping("/user/checkPassword") - @ResponseBody - public Result<String> checkPassword(@RequestBody JSONObject json) { - Result<String> result = new Result<>(); - Object operateCode = redisUtil.get(CommonConstant.THIRD_LOGIN_CODE); - if(operateCode==null || !operateCode.toString().equals(json.getString("operateCode"))){ - result.setSuccess(false); - result.setMessage("鏍¢獙澶辫触"); - return result; - } - String username = json.getString("uuid"); - SysUser user = this.sysUserService.getUserByName(username); - if(user==null){ - result.setMessage("鐢ㄦ埛鏈壘鍒�"); - result.setSuccess(false); - return result; - } - String password = json.getString("password"); - String salt = user.getSalt(); - String passwordEncode = PasswordUtil.encrypt(user.getUsername(), password, salt); - if(!passwordEncode.equals(user.getPassword())){ - result.setMessage("瀵嗙爜涓嶆纭�"); - result.setSuccess(false); - return result; - } + /** + * 缁戝畾璐﹀彿 闇�瑕佽缃瘑鐮� 闇�瑕佽蛋涓�閬嶆牎楠� + * + * @param json + * @return + */ + @PostMapping("/user/checkPassword") + @ResponseBody + public Result<String> checkPassword(@RequestBody JSONObject json) { + Result<String> result = new Result<>(); + Object operateCode = redisUtil.get(CommonConstant.THIRD_LOGIN_CODE); + if (operateCode == null || !operateCode.toString().equals(json.getString("operateCode"))) { + result.setSuccess(false); + result.setMessage("鏍¢獙澶辫触"); + return result; + } + String username = json.getString("uuid"); + SysUser user = this.sysUserService.getUserByName(username); + if (user == null) { + result.setMessage("鐢ㄦ埛鏈壘鍒�"); + result.setSuccess(false); + return result; + } + String password = json.getString("password"); + String salt = user.getSalt(); + String passwordEncode = PasswordUtil.encrypt(user.getUsername(), password, salt); + if (!passwordEncode.equals(user.getPassword())) { + result.setMessage("瀵嗙爜涓嶆纭�"); + result.setSuccess(false); + return result; + } - sysUserService.updateById(user); - result.setSuccess(true); - // 鐢熸垚token - String token = saveToken(user); - result.setResult(token); - return result; - } + sysUserService.updateById(user); + result.setSuccess(true); + // 鐢熸垚token + String token = saveToken(user); + result.setResult(token); + return result; + } - private String saveToken(SysUser user) { - // 鐢熸垚token - String token = JwtUtil.sign(user.getUsername(), user.getPassword()); - redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); - // 璁剧疆瓒呮椂鏃堕棿 - redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME * 2 / 1000); - return token; - } + private String saveToken(SysUser user) { + // 鐢熸垚token + String token = JwtUtil.sign(user.getUsername(), user.getPassword()); + redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); + // 璁剧疆瓒呮椂鏃堕棿 + redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME * 2 / 1000); + return token; + } - /** - * 绗笁鏂圭櫥褰曞洖璋冩帴鍙� - * @param token - * @param thirdType - * @return - * @throws Exception - */ - @SuppressWarnings("unchecked") - @RequestMapping(value = "/getLoginUser/{token}/{thirdType}", method = RequestMethod.GET) - @ResponseBody - public Result<JSONObject> getThirdLoginUser(@PathVariable("token") String token,@PathVariable("thirdType") String thirdType) throws Exception { - Result<JSONObject> result = new Result<JSONObject>(); - String username = JwtUtil.getUsername(token); + /** + * 绗笁鏂圭櫥褰曞洖璋冩帴鍙� + * + * @param token + * @param thirdType + * @return + * @throws Exception + */ + @SuppressWarnings("unchecked") + @RequestMapping(value = "/getLoginUser/{token}/{thirdType}", method = RequestMethod.GET) + @ResponseBody + public Result<JSONObject> getThirdLoginUser(@PathVariable("token") String token, @PathVariable("thirdType") String thirdType) throws Exception { + Result<JSONObject> result = new Result<JSONObject>(); + String username = JwtUtil.getUsername(token); - //1. 鏍¢獙鐢ㄦ埛鏄惁鏈夋晥 - SysUser sysUser = sysUserService.getUserByName(username); - result = sysUserService.checkUserIsEffective(sysUser); - if(!result.isSuccess()) { - return result; - } - //update-begin-author:wangshuai date:20201118 for:濡傛灉鐪熷疄濮撳悕鍜屽ご鍍忎笉瀛樺湪灏卞彇绗笁鏂圭櫥褰曠殑 - LambdaQueryWrapper<SysThirdAccount> query = new LambdaQueryWrapper<>(); - query.eq(SysThirdAccount::getSysUserId,sysUser.getId()); - query.eq(SysThirdAccount::getThirdType,thirdType); - SysThirdAccount account = sysThirdAccountService.getOne(query); - if(oConvertUtils.isEmpty(sysUser.getRealname())){ - sysUser.setRealname(account.getRealname()); - } - if(oConvertUtils.isEmpty(sysUser.getAvatar())){ - sysUser.setAvatar(account.getAvatar()); - } - //update-end-author:wangshuai date:20201118 for:濡傛灉鐪熷疄濮撳悕鍜屽ご鍍忎笉瀛樺湪灏卞彇绗笁鏂圭櫥褰曠殑 - JSONObject obj = new JSONObject(); - //鐢ㄦ埛鐧诲綍淇℃伅 - obj.put("userInfo", sysUser); - //token 淇℃伅 - obj.put("token", token); - result.setResult(obj); - result.setSuccess(true); - result.setCode(200); - baseCommonService.addLog("鐢ㄦ埛鍚�: " + username + ",鐧诲綍鎴愬姛[绗笁鏂圭敤鎴穄锛�", CommonConstant.LOG_TYPE_1, null); - return result; - } - /** - * 绗笁鏂圭粦瀹氭墜鏈哄彿杩斿洖token - * - * @param jsonObject - * @return - */ - @ApiOperation("鎵嬫満鍙风櫥褰曟帴鍙�") - @PostMapping("/bindingThirdPhone") - @ResponseBody - public Result<String> bindingThirdPhone(@RequestBody JSONObject jsonObject) { - Result<String> result = new Result<String>(); - String phone = jsonObject.getString("mobile"); - String thirdUserUuid = jsonObject.getString("thirdUserUuid"); - // 鏍¢獙楠岃瘉鐮� - String captcha = jsonObject.getString("captcha"); - //update-begin-author:taoyan date:2022-9-13 for: VUEN-2245 銆愭紡娲炪�戝彂鐜版柊婕忔礊寰呭鐞�20220906 - String redisKey = CommonConstant.PHONE_REDIS_KEY_PRE+phone; - Object captchaCache = redisUtil.get(redisKey); - //update-end-author:taoyan date:2022-9-13 for: VUEN-2245 銆愭紡娲炪�戝彂鐜版柊婕忔礊寰呭鐞�20220906 - if (oConvertUtils.isEmpty(captcha) || !captcha.equals(captchaCache)) { - result.setMessage("楠岃瘉鐮侀敊璇�"); - result.setSuccess(false); - return result; - } - //鏍¢獙鐢ㄦ埛鏈夋晥鎬� - SysUser sysUser = sysUserService.getUserByPhone(phone); - if(sysUser != null){ - // 瀛樺湪鐢ㄦ埛锛岀洿鎺ョ粦瀹� - sysThirdAccountService.updateThirdUserId(sysUser,thirdUserUuid); - }else{ - // 涓嶅瓨鍦ㄦ墜鏈哄彿锛屽垱寤虹敤鎴� - sysUser = sysThirdAccountService.createUser(phone,thirdUserUuid); - } - String token = saveToken(sysUser); - result.setSuccess(true); - result.setResult(token); - return result; - } + //1. 鏍¢獙鐢ㄦ埛鏄惁鏈夋晥 + SysUser sysUser = sysUserService.getUserByName(username); + result = sysUserService.checkUserIsEffective(sysUser); + if (!result.isSuccess()) { + return result; + } + //update-begin-author:wangshuai date:20201118 for:濡傛灉鐪熷疄濮撳悕鍜屽ご鍍忎笉瀛樺湪灏卞彇绗笁鏂圭櫥褰曠殑 + LambdaQueryWrapper<SysThirdAccount> query = new LambdaQueryWrapper<>(); + query.eq(SysThirdAccount::getSysUserId, sysUser.getId()); + query.eq(SysThirdAccount::getThirdType, thirdType); + SysThirdAccount account = sysThirdAccountService.getOne(query); + if (oConvertUtils.isEmpty(sysUser.getRealname())) { + sysUser.setRealname(account.getRealname()); + } + if (oConvertUtils.isEmpty(sysUser.getAvatar())) { + sysUser.setAvatar(account.getAvatar()); + } + //update-end-author:wangshuai date:20201118 for:濡傛灉鐪熷疄濮撳悕鍜屽ご鍍忎笉瀛樺湪灏卞彇绗笁鏂圭櫥褰曠殑 + JSONObject obj = new JSONObject(); + //鐢ㄦ埛鐧诲綍淇℃伅 + obj.put("userInfo", sysUser); + //token 淇℃伅 + obj.put("token", token); + result.setResult(obj); + result.setSuccess(true); + result.setCode(200); + baseCommonService.addLog("鐢ㄦ埛鍚�: " + username + ",鐧诲綍鎴愬姛[绗笁鏂圭敤鎴穄锛�", CommonConstant.LOG_TYPE_1, null); + return result; + } - /** - * 浼佷笟寰俊/閽夐拤 OAuth2鐧诲綍 - * - * @param source - * @param state - * @return - */ - @ResponseBody - @GetMapping("/oauth2/{source}/login") - public String oauth2LoginCallback(@PathVariable("source") String source, @RequestParam("state") String state, HttpServletResponse response) throws Exception { - String url; - if (ThirdAppConfig.WECHAT_ENTERPRISE.equalsIgnoreCase(source)) { - ThirdAppTypeItemVo config = thirdAppConfig.getWechatEnterprise(); - StringBuilder builder = new StringBuilder(); - // 鏋勯�犱紒涓氬井淇Auth2鐧诲綍鎺堟潈鍦板潃 - builder.append("https://open.weixin.qq.com/connect/oauth2/authorize"); - // 浼佷笟鐨凜orpID - builder.append("?appid=").append(config.getClientId()); - // 鎺堟潈鍚庨噸瀹氬悜鐨勫洖璋冮摼鎺ュ湴鍧�锛岃浣跨敤urlencode瀵归摼鎺ヨ繘琛屽鐞� - String redirectUri = RestUtil.getBaseUrl() + "/sys/thirdLogin/oauth2/wechat_enterprise/callback"; - builder.append("&redirect_uri=").append(URLEncoder.encode(redirectUri, "UTF-8")); - // 杩斿洖绫诲瀷锛屾鏃跺浐瀹氫负锛歝ode - builder.append("&response_type=code"); - // 搴旂敤鎺堟潈浣滅敤鍩熴�� - // snsapi_base锛氶潤榛樻巿鏉冿紝鍙幏鍙栨垚鍛樼殑鐨勫熀纭�淇℃伅锛圲serId涓嶥eviceId锛夛紱 - builder.append("&scope=snsapi_base"); - // 閲嶅畾鍚戝悗浼氬甫涓妔tate鍙傛暟锛岄暱搴︿笉鍙秴杩�128涓瓧鑺� - builder.append("&state=").append(state); - // 缁堢浣跨敤姝ゅ弬鏁板垽鏂槸鍚﹂渶瑕佸甫涓婅韩浠戒俊鎭� - builder.append("#wechat_redirect"); - url = builder.toString(); - } else if (ThirdAppConfig.DINGTALK.equalsIgnoreCase(source)) { - ThirdAppTypeItemVo config = thirdAppConfig.getDingtalk(); - StringBuilder builder = new StringBuilder(); - // 鏋勯�犻拤閽塐Auth2鐧诲綍鎺堟潈鍦板潃 - builder.append("https://login.dingtalk.com/oauth2/auth"); - // 鎺堟潈閫氳繃/鎷掔粷鍚庡洖璋冨湴鍧�銆� - // 娉ㄦ剰 闇�瑕佷笌娉ㄥ唽搴旂敤鏃剁櫥璁扮殑鍩熷悕淇濇寔涓�鑷淬�� - String redirectUri = RestUtil.getBaseUrl() + "/sys/thirdLogin/oauth2/dingtalk/callback"; - builder.append("?redirect_uri=").append(URLEncoder.encode(redirectUri, "UTF-8")); - // 鍥哄畾鍊间负code銆� - // 鎺堟潈閫氳繃鍚庤繑鍥瀉uthCode銆� - builder.append("&response_type=code"); - // 姝ラ涓�涓垱寤虹殑搴旂敤璇︽儏涓幏鍙栥�� - // 浼佷笟鍐呴儴搴旂敤锛歝lient_id涓哄簲鐢ㄧ殑AppKey銆� - builder.append("&client_id=").append(config.getClientId()); - // 鎺堟潈鑼冨洿锛屾巿鏉冮〉闈㈡樉绀虹殑鎺堟潈淇℃伅浠ュ簲鐢ㄦ敞鍐屾椂閰嶇疆鐨勪负鍑嗐�� - // openid锛氭巿鏉冨悗鍙幏寰楃敤鎴穟serid - builder.append("&scope=openid"); - // 璺熼殢authCode鍘熸牱杩斿洖銆� - builder.append("&state=").append(state); + /** + * 绗笁鏂圭粦瀹氭墜鏈哄彿杩斿洖token + * + * @param jsonObject + * @return + */ + @ApiOperation("鎵嬫満鍙风櫥褰曟帴鍙�") + @PostMapping("/bindingThirdPhone") + @ResponseBody + public Result<String> bindingThirdPhone(@RequestBody JSONObject jsonObject) { + Result<String> result = new Result<String>(); + String phone = jsonObject.getString("mobile"); + String thirdUserUuid = jsonObject.getString("thirdUserUuid"); + // 鏍¢獙楠岃瘉鐮� + String captcha = jsonObject.getString("captcha"); + //update-begin-author:taoyan date:2022-9-13 for: VUEN-2245 銆愭紡娲炪�戝彂鐜版柊婕忔礊寰呭鐞�20220906 + String redisKey = CommonConstant.PHONE_REDIS_KEY_PRE + phone; + Object captchaCache = redisUtil.get(redisKey); + //update-end-author:taoyan date:2022-9-13 for: VUEN-2245 銆愭紡娲炪�戝彂鐜版柊婕忔礊寰呭鐞�20220906 + if (oConvertUtils.isEmpty(captcha) || !captcha.equals(captchaCache)) { + result.setMessage("楠岃瘉鐮侀敊璇�"); + result.setSuccess(false); + return result; + } + //鏍¢獙鐢ㄦ埛鏈夋晥鎬� + SysUser sysUser = sysUserService.getUserByPhone(phone); + if (sysUser != null) { + // 瀛樺湪鐢ㄦ埛锛岀洿鎺ョ粦瀹� + sysThirdAccountService.updateThirdUserId(sysUser, thirdUserUuid); + } else { + // 涓嶅瓨鍦ㄦ墜鏈哄彿锛屽垱寤虹敤鎴� + sysUser = sysThirdAccountService.createUser(phone, thirdUserUuid); + } + String token = saveToken(sysUser); + result.setSuccess(true); + result.setResult(token); + return result; + } + + /** + * 浼佷笟寰俊/閽夐拤 OAuth2鐧诲綍 + * + * @param source + * @param state + * @return + */ + @ResponseBody + @GetMapping("/oauth2/{source}/login") + public String oauth2LoginCallback(@PathVariable("source") String source, @RequestParam("state") String state, HttpServletResponse response) throws Exception { + String url; + if (ThirdAppConfig.WECHAT_ENTERPRISE.equalsIgnoreCase(source)) { + ThirdAppTypeItemVo config = thirdAppConfig.getWechatEnterprise(); + StringBuilder builder = new StringBuilder(); + // 鏋勯�犱紒涓氬井淇Auth2鐧诲綍鎺堟潈鍦板潃 + builder.append("https://open.weixin.qq.com/connect/oauth2/authorize"); + // 浼佷笟鐨凜orpID + builder.append("?appid=").append(config.getClientId()); + // 鎺堟潈鍚庨噸瀹氬悜鐨勫洖璋冮摼鎺ュ湴鍧�锛岃浣跨敤urlencode瀵归摼鎺ヨ繘琛屽鐞� + String redirectUri = RestUtil.getBaseUrl() + "/sys/thirdLogin/oauth2/wechat_enterprise/callback"; + builder.append("&redirect_uri=").append(URLEncoder.encode(redirectUri, "UTF-8")); + // 杩斿洖绫诲瀷锛屾鏃跺浐瀹氫负锛歝ode + builder.append("&response_type=code"); + // 搴旂敤鎺堟潈浣滅敤鍩熴�� + // snsapi_base锛氶潤榛樻巿鏉冿紝鍙幏鍙栨垚鍛樼殑鐨勫熀纭�淇℃伅锛圲serId涓嶥eviceId锛夛紱 + builder.append("&scope=snsapi_base"); + // 閲嶅畾鍚戝悗浼氬甫涓妔tate鍙傛暟锛岄暱搴︿笉鍙秴杩�128涓瓧鑺� + builder.append("&state=").append(state); + // 缁堢浣跨敤姝ゅ弬鏁板垽鏂槸鍚﹂渶瑕佸甫涓婅韩浠戒俊鎭� + builder.append("#wechat_redirect"); + url = builder.toString(); + } else if (ThirdAppConfig.DINGTALK.equalsIgnoreCase(source)) { + ThirdAppTypeItemVo config = thirdAppConfig.getDingtalk(); + StringBuilder builder = new StringBuilder(); + // 鏋勯�犻拤閽塐Auth2鐧诲綍鎺堟潈鍦板潃 + builder.append("https://login.dingtalk.com/oauth2/auth"); + // 鎺堟潈閫氳繃/鎷掔粷鍚庡洖璋冨湴鍧�銆� + // 娉ㄦ剰 闇�瑕佷笌娉ㄥ唽搴旂敤鏃剁櫥璁扮殑鍩熷悕淇濇寔涓�鑷淬�� + String redirectUri ="http://houjie.xalxzn.com:8866/jeecg-boot/sys/thirdLogin/oauth2/dingtalk/callback"; + builder.append("?redirect_uri=").append(URLEncoder.encode(redirectUri, "UTF-8")); + // 鍥哄畾鍊间负code銆� + // 鎺堟潈閫氳繃鍚庤繑鍥瀉uthCode銆� + builder.append("&response_type=code"); + // 姝ラ涓�涓垱寤虹殑搴旂敤璇︽儏涓幏鍙栥�� + // 浼佷笟鍐呴儴搴旂敤锛歝lient_id涓哄簲鐢ㄧ殑AppKey銆� + builder.append("&client_id=").append(config.getClientId()); + // 鎺堟潈鑼冨洿锛屾巿鏉冮〉闈㈡樉绀虹殑鎺堟潈淇℃伅浠ュ簲鐢ㄦ敞鍐屾椂閰嶇疆鐨勪负鍑嗐�� + // openid锛氭巿鏉冨悗鍙幏寰楃敤鎴穟serid + builder.append("&scope=openid"); + // 璺熼殢authCode鍘熸牱杩斿洖銆� + builder.append("&state=").append(state); //update-begin---author:wangshuai ---date:20220613 for锛歔issues/I5BOUF]oauth2 閽夐拤鏃犳硶鐧诲綍------------ builder.append("&prompt=").append("consent"); //update-end---author:wangshuai ---date:20220613 for锛歔issues/I5BOUF]oauth2 閽夐拤鏃犳硶鐧诲綍-------------- url = builder.toString(); - } else { - return "涓嶆敮鎸佺殑source"; - } - log.info("oauth2 login url:" + url); - response.sendRedirect(url); - return "login鈥�"; - } + } else { + return "涓嶆敮鎸佺殑source"; + } + log.info("oauth2 login url:" + url); + response.sendRedirect(url); + return "login.."; + } /** * 浼佷笟寰俊/閽夐拤 OAuth2鐧诲綍鍥炶皟 @@ -355,16 +359,16 @@ * @param response * @return */ - @ResponseBody - @GetMapping("/oauth2/{source}/callback") - public String oauth2LoginCallback( - @PathVariable("source") String source, - // 浼佷笟寰俊杩斿洖鐨刢ode - @RequestParam(value = "code", required = false) String code, - // 閽夐拤杩斿洖鐨刢ode - @RequestParam(value = "authCode", required = false) String authCode, - @RequestParam("state") String state, - HttpServletResponse response) { + @ResponseBody + @GetMapping("/oauth2/{source}/callback") + public String oauth2LoginCallback( + @PathVariable("source") String source, + // 浼佷笟寰俊杩斿洖鐨刢ode + @RequestParam(value = "code", required = false) String code, + // 閽夐拤杩斿洖鐨刢ode + @RequestParam(value = "authCode", required = false) String authCode, + @RequestParam("state") String state, + HttpServletResponse response) { SysUser loginUser; if (ThirdAppConfig.WECHAT_ENTERPRISE.equalsIgnoreCase(source)) { log.info("銆愪紒涓氬井淇°�慜Auth2鐧诲綍杩涘叆callback锛歝ode=" + code + ", state=" + state); @@ -373,38 +377,37 @@ return "鐧诲綍澶辫触"; } } else if (ThirdAppConfig.DINGTALK.equalsIgnoreCase(source)) { - log.info("銆愰拤閽夈�慜Auth2鐧诲綍杩涘叆callback锛歛uthCode=" + authCode + ", state=" + state); - loginUser = thirdAppDingtalkService.oauth2Login(authCode); - if (loginUser == null) { - return "鐧诲綍澶辫触"; - } + log.info("銆愰拤閽夈�慜Auth2鐧诲綍杩涘叆callback锛歛uthCode=" + authCode + ", state=" + state); + loginUser = thirdAppDingtalkService.oauth2Login(authCode); + if (loginUser == null) { + return "鐧诲綍澶辫触"; + } } else { return "涓嶆敮鎸佺殑source"; } try { - //update-begin-author:taoyan date:2022-6-30 for: 宸ヤ綔娴佸彂閫佹秷鎭� 鐐瑰嚮娑堟伅閾炬帴璺宠浆鍔炵悊椤甸潰 - String redirect = ""; - if (state.indexOf("?") > 0) { - String[] arr = state.split("\\?"); - state = arr[0]; - if(arr.length>1){ - redirect = arr[1]; - } - } - - String token = saveToken(loginUser); - state += "/oauth2-app/login?oauth2LoginToken=" + URLEncoder.encode(token, "UTF-8"); - //update-begin---author:wangshuai ---date:20220613 for锛歔issues/I5BOUF]oauth2 閽夐拤鏃犳硶鐧诲綍------------ - state += "&thirdType=" + source; - //state += "&thirdType=" + "wechat_enterprise"; - if (redirect != null && redirect.length() > 0) { - state += "&redirect=" + redirect; - } - //update-end-author:taoyan date:2022-6-30 for: 宸ヤ綔娴佸彂閫佹秷鎭� 鐐瑰嚮娑堟伅閾炬帴璺宠浆鍔炵悊椤甸潰 + //update-begin-author:taoyan date:2022-6-30 for: 宸ヤ綔娴佸彂閫佹秷鎭� 鐐瑰嚮娑堟伅閾炬帴璺宠浆鍔炵悊椤甸潰 + String redirect = ""; + if (state.indexOf("?") > 0) { + String[] arr = state.split("\\?"); + state = arr[0]; + if (arr.length > 1) { + redirect = arr[1]; + } + } + String token = saveToken(loginUser); + state += "/h5/oauth2-app/login?oauth2LoginToken=" + URLEncoder.encode(token, "UTF-8"); + //update-begin---author:wangshuai ---date:20220613 for锛歔issues/I5BOUF]oauth2 閽夐拤鏃犳硶鐧诲綍------------ + state += "&thirdType=" + source; + //state += "&thirdType=" + "wechat_enterprise"; + if (redirect != null && redirect.length() > 0) { + state += "&" + redirect; + } + //update-end-author:taoyan date:2022-6-30 for: 宸ヤ綔娴佸彂閫佹秷鎭� 鐐瑰嚮娑堟伅閾炬帴璺宠浆鍔炵悊椤甸潰 //update-end---author:wangshuai ---date:20220613 for锛歔issues/I5BOUF]oauth2 閽夐拤鏃犳硶鐧诲綍------------ - log.info("OAuth2鐧诲綍閲嶅畾鍚戝湴鍧�: " + state); + log.info("OAuth2鐧诲綍閲嶅畾鍚戝湴鍧�: " + state); try { response.sendRedirect(state); return "ok"; diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDictServiceImpl.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDictServiceImpl.java index c9f52a2..85bee7b 100644 --- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDictServiceImpl.java +++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDictServiceImpl.java @@ -62,7 +62,7 @@ } @Override - @Cacheable(value = CacheConstant.SYS_ENABLE_DICT_CACHE,key = "#code", unless = "#result == null ") +// @Cacheable(value = CacheConstant.SYS_ENABLE_DICT_CACHE,key = "#code", unless = "#result == null ") public List<DictModel> queryEnableDictItemsByCode(String code) { log.debug("鏃犵紦瀛榙ictCache鐨勬椂鍊欒皟鐢ㄨ繖閲岋紒"); return sysDictMapper.queryEnableDictItemsByCode(code); diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppDingtalkServiceImpl.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppDingtalkServiceImpl.java index e1d122c..8184fb8 100644 --- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppDingtalkServiceImpl.java +++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppDingtalkServiceImpl.java @@ -827,7 +827,7 @@ return null; } int agentId = thirdAppConfig.getDingtalk().getAgentIdInt(); - return JdtMessageAPI.recallMessage(agentId, msgTaskId, getAccessToken()); + return JdtMessageAPI.recallMessage(String.valueOf(agentId), msgTaskId, getAccessToken()); } /** -- Gitblit v1.9.3