From 085f7500992d6f6c83b60d1ce0bd8e87b12e8328 Mon Sep 17 00:00:00 2001 From: zhanghua <314079846@qq.com> Date: 星期一, 04 十一月 2024 18:23:42 +0800 Subject: [PATCH] 钉钉登录 --- ruoyi-extend/ruoyi-powerjob-server/src/main/resources/application-dev.properties | 4 +- ruoyi-admin/pom.xml | 10 +++++ ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java | 98 +++++++++++++++++++++++++++++++++++++++++++++++- ruoyi-admin/src/main/resources/application-dev.yml | 8 ++-- 4 files changed, 111 insertions(+), 9 deletions(-) diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml index 8193359..8875fa6 100644 --- a/ruoyi-admin/pom.xml +++ b/ruoyi-admin/pom.xml @@ -87,6 +87,16 @@ <artifactId>JustAuth</artifactId> </dependency> + <dependency> + <groupId>com.aliyun</groupId> + <artifactId>dingtalk</artifactId> + <version>2.1.61</version> + </dependency> + <dependency> + <groupId>com.aliyun</groupId> + <artifactId>alibaba-dingtalk-service-sdk</artifactId> + <version>2.0.0</version> + </dependency> <!-- skywalking 鏁村悎 logback --> <!-- <dependency>--> <!-- <groupId>org.apache.skywalking</groupId>--> diff --git a/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java b/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java index 57a117d..774366d 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java @@ -3,7 +3,21 @@ import cn.dev33.satoken.annotation.SaIgnore; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSON; +import com.aliyun.dingtalkcontact_1_0.models.GetUserHeaders; +import com.aliyun.dingtalkcontact_1_0.models.GetUserResponseBody; +import com.aliyun.dingtalkoauth2_1_0.models.GetUserTokenRequest; +import com.aliyun.dingtalkoauth2_1_0.models.GetUserTokenResponse; +import com.aliyun.teautil.models.RuntimeOptions; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.dingtalk.api.DefaultDingTalkClient; +import com.dingtalk.api.DingTalkClient; +import com.dingtalk.api.request.*; +import com.dingtalk.api.response.OapiUserGetbyunionidResponse; +import com.dingtalk.api.response.OapiUserGetuserinfoResponse; +import com.dingtalk.api.response.OapiV2UserGetResponse; +import com.dingtalk.api.response.OapiV2UserGetuserinfoResponse; +import com.taobao.api.ApiException; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -26,7 +40,6 @@ import org.dromara.system.domain.SysClient; import org.dromara.system.domain.SysUser; import org.dromara.system.domain.bo.SysTenantBo; -import org.dromara.system.domain.bo.SysUserBo; import org.dromara.system.domain.vo.SysTenantVo; import org.dromara.system.mapper.SysUserMapper; import org.dromara.system.service.*; @@ -39,6 +52,7 @@ import org.dromara.web.service.SysRegisterService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import com.aliyun.teaopenapi.models.Config; import java.net.URL; import java.util.List; @@ -205,13 +219,91 @@ .eq(SysUser::getUserName, user.getUsername()) .eq(SysUser::getStatus, "0") .eq(SysUser::getDelFlag, "0")); - if(!exists){ + if (!exists) { registerService.register(user); } - LoginBody loginBody = AutoLoginUtil.create(user,clientId); + LoginBody loginBody = AutoLoginUtil.create(user, clientId); // 鐧诲綍 return R.ok(IAuthStrategy.login(loginBody, client)); } + + public static com.aliyun.dingtalkoauth2_1_0.Client authClient() throws Exception { + Config config = new Config(); + config.protocol = "https"; + config.regionId = "central"; + return new com.aliyun.dingtalkoauth2_1_0.Client(config); + } + + /** + * 鑾峰彇鐢ㄦ埛token + * + * @param authCode + * @return + * @throws Exception + */ + //鎺ュ彛鍦板潃锛氭敞鎰�/auth涓庨拤閽夌櫥褰曚笌鍒嗕韩鐨勫洖璋冨煙鍚嶅湴鍧�涓�鑷� + @RequestMapping(value = "/dingdingLogin", method = RequestMethod.GET) + public String getAccessToken(@RequestParam(value = "authCode") String authCode, @RequestParam(value = "code") String code) throws Exception { + com.aliyun.dingtalkoauth2_1_0.Client client = authClient(); + GetUserTokenRequest getUserTokenRequest = new GetUserTokenRequest() + + //搴旂敤鍩虹淇℃伅-搴旂敤淇℃伅鐨凙ppKey,璇峰姟蹇呮浛鎹负寮�鍙戠殑搴旂敤AppKey + .setClientId("dingl5dxahaj3uzfug66") + + //搴旂敤鍩虹淇℃伅-搴旂敤淇℃伅鐨凙ppSecret锛�,璇峰姟蹇呮浛鎹负寮�鍙戠殑搴旂敤AppSecret + .setClientSecret("AGDu7NfzkverlMXq8CUDiy6EXx5jSL4v2p-Odz1mpXV5e4_K3kB1Acat0RftzBXC") + .setCode(authCode) + .setGrantType("authorization_code"); + GetUserTokenResponse getUserTokenResponse = client.getUserToken(getUserTokenRequest); + //鑾峰彇鐢ㄦ埛涓汉token + String accessToken = getUserTokenResponse.getBody().getAccessToken(); + GetUserResponseBody userResponseBody = getUserinfoNoId(accessToken); + String userId = getUserId(accessToken, userResponseBody.getUnionId()); + OapiV2UserGetResponse.UserGetResponse userGetResponse = getUserinfo(accessToken, userId); + return ""; + } + + public static com.aliyun.dingtalkcontact_1_0.Client contactClient() throws Exception { + Config config = new Config(); + config.protocol = "https"; + config.regionId = "central"; + return new com.aliyun.dingtalkcontact_1_0.Client(config); + } + + /** + * 鑾峰彇鐢ㄦ埛涓汉淇℃伅 + * + * @param accessToken + * @return + * @throws Exception + */ + public GetUserResponseBody getUserinfoNoId(String accessToken) throws Exception { + com.aliyun.dingtalkcontact_1_0.Client client = contactClient(); + GetUserHeaders getUserHeaders = new GetUserHeaders(); + getUserHeaders.xAcsDingtalkAccessToken = accessToken; + //鑾峰彇鐢ㄦ埛涓汉淇℃伅锛屽闇�鑾峰彇褰撳墠鎺堟潈浜虹殑淇℃伅锛寀nionId鍙傛暟蹇呴』浼爉e + GetUserResponseBody userResponse = client.getUserWithOptions("me", getUserHeaders, new RuntimeOptions()).getBody(); + + return userResponse; + } + + public String getUserId(String accessToken, String unionId) throws ApiException { + DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/user/getbyunionid"); + OapiUserGetbyunionidRequest req = new OapiUserGetbyunionidRequest(); + req.setUnionid(unionId); + OapiUserGetbyunionidResponse rsp = client.execute(req, accessToken); + return rsp.getResult().getUserid(); + } + + public OapiV2UserGetResponse.UserGetResponse getUserinfo(String accessToken, String userId) throws Exception { + DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/get"); + OapiV2UserGetRequest req = new OapiV2UserGetRequest(); + req.setUserid(userId); + req.setLanguage("en_US"); + OapiV2UserGetResponse rsp = client.execute(req, accessToken); + return rsp.getResult(); + } + } diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml index 1767212..d31c6b9 100644 --- a/ruoyi-admin/src/main/resources/application-dev.yml +++ b/ruoyi-admin/src/main/resources/application-dev.yml @@ -43,9 +43,9 @@ driverClassName: com.mysql.cj.jdbc.Driver # jdbc 鎵�鏈夊弬鏁伴厤缃弬鑰� https://lionli.blog.csdn.net/article/details/122018562 # rewriteBatchedStatements=true 鎵瑰鐞嗕紭鍖� 澶у箙鎻愬崌鎵归噺鎻掑叆鏇存柊鍒犻櫎鎬ц兘(瀵规暟鎹簱鏈夋�ц兘鎹熻�� 浣跨敤鎵归噺鎿嶄綔搴旇�冭檻鎬ц兘闂) - url: jdbc:mysql://123.207.71.245:13306/qysp?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true + url: jdbc:mysql://101.35.247.188:3306/qysp?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true username: root - password: 234#Wersdf! + password: ycl@202466 # 浠庡簱鏁版嵁婧� slave: lazy: true @@ -96,9 +96,9 @@ spring.data: redis: # 鍦板潃 - host: 162.14.79.111 + host: 127.0.0.1 # 绔彛锛岄粯璁や负6379 - port: 16379 + port: 6379 password: 234#Wersdf! # 鏁版嵁搴撶储寮� database: 0 diff --git a/ruoyi-extend/ruoyi-powerjob-server/src/main/resources/application-dev.properties b/ruoyi-extend/ruoyi-powerjob-server/src/main/resources/application-dev.properties index 9e815fa..62764e5 100644 --- a/ruoyi-extend/ruoyi-powerjob-server/src/main/resources/application-dev.properties +++ b/ruoyi-extend/ruoyi-powerjob-server/src/main/resources/application-dev.properties @@ -2,9 +2,9 @@ ####### Database properties(Configure according to the the environment) ####### spring.datasource.core.driver-class-name=com.mysql.cj.jdbc.Driver -spring.datasource.core.jdbc-url=jdbc:mysql://123.207.71.245:13306/qysp?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true +spring.datasource.core.jdbc-url=jdbc:mysql://101.35.247.188:3306/qysp?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true spring.datasource.core.username=root -spring.datasource.core.password=234#Wersdf! +spring.datasource.core.password=ycl@202466 spring.datasource.core.maximum-pool-size=20 spring.datasource.core.minimum-idle=5 -- Gitblit v1.8.0