钉钉免登接口

2024年8月28日10:59:51
This commit is contained in:
xiang2lin 2024-08-28 10:59:56 +08:00
parent b2ac424563
commit 0de8911009
1 changed files with 41 additions and 5 deletions

View File

@ -2,7 +2,12 @@ package com.hzya.frame.webapp.entrance.controler;
import cn.hutool.extra.servlet.ServletUtil;
import com.alibaba.fastjson.JSON;
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiUserGetuserinfoRequest;
import com.dingtalk.api.response.OapiUserGetuserinfoResponse;
import com.hzya.frame.bip.v3.v2207.service.IBipSsoService;
import com.hzya.frame.dingtalk.util.DingTalkAccessToken;
import com.hzya.frame.sysnew.application.service.ISysApplicationService;
import com.hzya.frame.sys.entity.EsbReturnEntity;
import com.hzya.frame.sys.file.download.entity.FileDownloadEntity;
@ -13,6 +18,7 @@ import com.hzya.frame.web.entity.BaseResult;
import com.hzya.frame.web.entity.JsonResultEntity;
import com.hzya.frame.web.exception.BaseSystemException;
import com.hzya.frame.webapp.entrance.service.IEntranceService;
import com.taobao.api.ApiException;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -23,11 +29,7 @@ import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
@ -37,6 +39,8 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
/**
* @Content程序唯一入口controller
@ -197,4 +201,36 @@ public class EntranceController {
// logger.info("servletResponse"+JSON.toJSONString(servletResponse));
return BaseResult.getSuccessMessageEntity("调用成功"+oldbodys);
}
/**
* 免登
* 钉钉通过免登码获取userid
* @param requestAuthCode
* @return
* ServiceResult
* 2020-11-3
*/
@RequestMapping(value = "/ddLogin", method = RequestMethod.GET)
public JsonResultEntity ddLogin (@RequestParam("code") String requestAuthCode) {
logger.info("dingTalk免登码:{}",requestAuthCode);
// 获取用户信息
DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/getuserinfo");
OapiUserGetuserinfoRequest request = new OapiUserGetuserinfoRequest();
request.setCode(requestAuthCode);
request.setHttpMethod("GET");
OapiUserGetuserinfoResponse response;
try {
response = client.execute(request, DingTalkAccessToken.getAccessToken());
} catch (Exception e) {
e.printStackTrace();
logger.error("dd免登失败:{}",e);
return BaseResult.getFailureMessageEntity("失败");
}
// 查询得到当前用户的userId
// 获得到userId之后应用应该处理应用自身的登录会话管理session,避免后续的业务交互前端到应用服务端每次都要重新获取用户身份提升用户体验
String userId = response.getUserid();
Map<String, Object> returnMap = new HashMap<String,Object>();
returnMap.put("userId", userId);
return BaseResult.getSuccessMessageEntity("成功",returnMap);
}
}