From c64caa25a8f6ffa026527828c1da3cd97c5c99c6 Mon Sep 17 00:00:00 2001 From: cuilei <ray_tsu1@163.com> Date: 星期四, 17 七月 2025 16:22:34 +0800 Subject: [PATCH] 企业微信H5登录手动授权并获取手机号码适配修改,用户同步根据现场情况调整 --- lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/ThirdLoginController.java | 27 ++++++++++++++++++++++----- 1 files changed, 22 insertions(+), 5 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..ea29976 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 @@ -9,6 +9,7 @@ import me.zhyd.oauth.model.AuthResponse; import me.zhyd.oauth.request.AuthRequest; import me.zhyd.oauth.utils.AuthStateUtils; +import org.apache.shiro.SecurityUtils; import org.jeecg.common.api.vo.Result; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.system.util.JwtUtil; @@ -16,6 +17,7 @@ import org.jeecg.common.util.RedisUtil; import org.jeecg.common.util.RestUtil; import org.jeecg.common.util.oConvertUtils; +import org.jeecg.config.shiro.JwtToken; import org.jeecg.config.thirdapp.ThirdAppConfig; import org.jeecg.config.thirdapp.ThirdAppTypeItemVo; import org.jeecg.modules.base.service.BaseCommonService; @@ -64,6 +66,9 @@ @Autowired private ThirdAppDingtalkServiceImpl thirdAppDingtalkService; + /**token鏈夋晥鏃堕棿锛岀洰鍓嶇幇鍦鸿姹備紒涓氬井淇℃湁鏁堟椂闂�*/ + public static final long EXPIRE_TIME = 30L * 24 * 60 * 60 * 1000; + @RequestMapping("/render/{source}") public void render(@PathVariable("source") String source, HttpServletResponse response) throws IOException { log.info("绗笁鏂圭櫥褰曡繘鍏ender锛�" + source); @@ -108,6 +113,9 @@ String sysUserId = user.getSysUserId(); SysUser sysUser = sysUserService.getById(sysUserId); String token = saveToken(sysUser); + // 浣跨敤token杩涜Shiro鐧诲綍 + JwtToken jwtToken = new JwtToken(token); + SecurityUtils.getSubject().login(jwtToken); // 姝よ浠g爜浼氳Е鍙慠ealm鐨勮璇佹柟娉曪紝灏嗙敤鎴蜂俊鎭瓨鍏hiro鐨勪細璇� modelMap.addAttribute("token", token); }else{ modelMap.addAttribute("token", "缁戝畾鎵嬫満鍙�,"+""+uuid); @@ -198,7 +206,7 @@ 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); + redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, EXPIRE_TIME / 1000); return token; } @@ -303,15 +311,17 @@ // 浼佷笟鐨凜orpID builder.append("?appid=").append(config.getClientId()); // 鎺堟潈鍚庨噸瀹氬悜鐨勫洖璋冮摼鎺ュ湴鍧�锛岃浣跨敤urlencode瀵归摼鎺ヨ繘琛屽鐞� - String redirectUri = RestUtil.getBaseUrl() + "/sys/thirdLogin/oauth2/wechat_enterprise/callback"; + String redirectUri ="https://fastwoke.cn:8087/jeecg-boot/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"); + //builder.append("&scope=snsapi_base"); + builder.append("&scope=snsapi_privateinfo"); // 鎵嬪姩鎺堟潈浣滅敤鍩� // 閲嶅畾鍚戝悗浼氬甫涓妔tate鍙傛暟锛岄暱搴︿笉鍙秴杩�128涓瓧鑺� builder.append("&state=").append(state); + builder.append("&agentid=").append(config.getAgentId()); // 琛ュ厖AgentID // 缁堢浣跨敤姝ゅ弬鏁板垽鏂槸鍚﹂渶瑕佸甫涓婅韩浠戒俊鎭� builder.append("#wechat_redirect"); url = builder.toString(); @@ -368,6 +378,10 @@ SysUser loginUser; if (ThirdAppConfig.WECHAT_ENTERPRISE.equalsIgnoreCase(source)) { log.info("銆愪紒涓氬井淇°�慜Auth2鐧诲綍杩涘叆callback锛歝ode=" + code + ", state=" + state); + if (code == null) { + log.info("鐢ㄦ埛鍙栨秷浜嗕紒涓氬井淇℃巿鏉�"); + return "鐢ㄦ埛鍙栨秷浜嗘巿鏉�"; + } loginUser = thirdAppWechatEnterpriseService.oauth2Login(code); if (loginUser == null) { return "鐧诲綍澶辫触"; @@ -394,12 +408,15 @@ } String token = saveToken(loginUser); - state += "/oauth2-app/login?oauth2LoginToken=" + URLEncoder.encode(token, "UTF-8"); + // ============ 鏂板 Shiro 鐧诲綍閫昏緫 ============ + JwtToken jwtToken = new JwtToken(token); + SecurityUtils.getSubject().login(jwtToken); + 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=" + redirect; + state += "&" + redirect; } //update-end-author:taoyan date:2022-6-30 for: 宸ヤ綔娴佸彂閫佹秷鎭� 鐐瑰嚮娑堟伅閾炬帴璺宠浆鍔炵悊椤甸潰 -- Gitblit v1.9.3