提交 65c224e4 authored 作者: liupengfei's avatar liupengfei

--no commit message

上级 c5429da2
package com;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
/**
* 启动入口
*/
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
package com.config;
/**
* 项目中的常量定义类
*/
public class Constant {
/**
* 开发者后台->企业自建应用->选择您创建的E应用->查看->AppKey
*/
public static final String APP_KEY = "dingwesx1s7iuqh4anhu";
/**
* 开发者后台->企业自建应用->选择您创建的E应用->查看->AppSecret
*/
public static final String APP_SECRET="qkRYMu5MFh3M_croU4asvAIh1XM7QOm_-gtNjTWCwNx_y4_xoxVLYo7D9zl28GGk";
}
package com.config;
public class URLConstant {
/**
* 钉钉网关gettoken地址
*/
public static final String URL_GET_TOKKEN = "https://oapi.dingtalk.com/gettoken";
/**
*获取用户在企业内userId的接口URL
*/
public static final String URL_GET_USER_INFO = "https://oapi.dingtalk.com/user/getuserinfo";
/**
*获取用户姓名的接口url
*/
public static final String URL_USER_GET = "https://oapi.dingtalk.com/user/get";
}
package com.controller;
import com.config.URLConstant;
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiUserGetRequest;
import com.dingtalk.api.request.OapiUserGetuserinfoRequest;
import com.dingtalk.api.response.OapiUserGetResponse;
import com.dingtalk.api.response.OapiUserGetuserinfoResponse;
import com.taobao.api.ApiException;
import com.util.AccessTokenUtil;
import com.util.ServiceResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
/**
* 企业内部E应用Quick-Start示例代码 实现了最简单的免密登录(免登)功能
*/
@RestController
public class IndexController {
private static final Logger bizLogger = LoggerFactory.getLogger(IndexController.class);
/**
* 欢迎页面,通过url访问,判断后端服务是否启动
*/
@RequestMapping(value = "/welcome", method = RequestMethod.GET)
public String welcome() {
return "welcome";
}
/**
* 钉钉用户登录,显示当前登录用户的userId和名称
*
* @param requestAuthCode 免登临时code
*/
@RequestMapping(value = "/login", method = RequestMethod.POST)
@ResponseBody
public ServiceResult login(@RequestParam(value = "authCode") String requestAuthCode) {
//获取accessToken,注意正是代码要有异常流处理
String accessToken = AccessTokenUtil.getToken();
//获取用户信息
DingTalkClient client = new DefaultDingTalkClient(URLConstant.URL_GET_USER_INFO);
OapiUserGetuserinfoRequest request = new OapiUserGetuserinfoRequest();
request.setCode(requestAuthCode);
request.setHttpMethod("GET");
OapiUserGetuserinfoResponse response;
try {
response = client.execute(request, accessToken);
} catch (ApiException e) {
e.printStackTrace();
return null;
}
//3.查询得到当前用户的userId
// 获得到userId之后应用应该处理应用自身的登录会话管理(session),避免后续的业务交互(前端到应用服务端)每次都要重新获取用户身份,提升用户体验
String userId = response.getUserid();
String userName = getUserName(accessToken, userId);
System.out.println(userName);
//返回结果
Map<String, Object> resultMap = new HashMap<>();
resultMap.put("userId", userId);
resultMap.put("userName", userName);
ServiceResult serviceResult = ServiceResult.success(resultMap);
return serviceResult;
}
/**
* 获取用户姓名
*
* @param accessToken
* @param userId
* @return
*/
private String getUserName(String accessToken, String userId) {
try {
DingTalkClient client = new DefaultDingTalkClient(URLConstant.URL_USER_GET);
OapiUserGetRequest request = new OapiUserGetRequest();
request.setUserid(userId);
request.setHttpMethod("GET");
OapiUserGetResponse response = client.execute(request, accessToken);
return response.getName();
} catch (ApiException e) {
e.printStackTrace();
return null;
}
}
}
package com.util;
import com.config.Constant;
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.request.OapiGettokenRequest;
import com.dingtalk.api.response.OapiGettokenResponse;
import com.taobao.api.ApiException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static com.config.URLConstant.URL_GET_TOKKEN;
/**
* 获取access_token工具类
*/
public class AccessTokenUtil {
private static final Logger bizLogger = LoggerFactory.getLogger(AccessTokenUtil.class);
public static String getToken() throws RuntimeException {
try {
DefaultDingTalkClient client = new DefaultDingTalkClient(URL_GET_TOKKEN);
OapiGettokenRequest request = new OapiGettokenRequest();
request.setAppkey(Constant.APP_KEY);
request.setAppsecret(Constant.APP_SECRET);
request.setHttpMethod("GET");
OapiGettokenResponse response = client.execute(request);
String accessToken = response.getAccessToken();
return accessToken;
} catch (ApiException e) {
bizLogger.error("getAccessToken failed", e);
throw new RuntimeException();
}
}
public static void main(String[] args)throws ApiException{
String accessToken = AccessTokenUtil.getToken();
System.out.println(accessToken);
}
}
package com.util;
public class LogFormatter {
private static boolean isEmpty(Object str) {
return (str == null || "".equals(str));
}
public static String getKVLogData(LogEvent logEvent, KeyValue... args) {
return getKVLogData(logEvent, null, null, null, args);
}
public static String getKVLogData(LogEvent logEvent, String message, KeyValue... args) {
return getKVLogData(logEvent, message, null, null, args);
}
public static String getKVLogData(LogEvent logEvent, String message, String errCode, String errMsg,
KeyValue... args) {
StringBuilder logData = new StringBuilder();
logData.append("logEvent:");
logData.append(logEvent == null ? "" : logEvent.getValue());
if (!isEmpty(message)) {
logData.append("\t");
logData.append("msg:");
logData.append(message);
}
if (!isEmpty(errCode)) {
logData.append("\t");
logData.append("errCode:");
logData.append(errCode);
}
if (!isEmpty(errMsg)) {
logData.append("\t");
logData.append("errMsg:");
logData.append(errMsg);
}
if (args.length > 0) {
for (int i = 0; i < args.length; i++) {
KeyValue keyValue = args[i];
if (keyValue != null) {
logData.append("\t");
logData.append(keyValue.getKey());
logData.append(":");
logData.append(keyValue.getValue());
}
}
}
return logData.toString();
}
public static enum LogEvent {
START("开始"), END("结束");
private String value;
private LogEvent(String value){
this.value = value;
}
public String getValue() {
return value;
}
}
public static class KeyValue {
private String key;
private Object value;
public String getKey() {
return key;
}
public String getValue() {
return String.valueOf(value);
}
private KeyValue(String key, Object value){
super();
this.key = key;
this.value = value;
}
public static KeyValue getNew(String key, Object value) {
return new KeyValue(key, value);
}
}
}
package com.util;
import java.io.Serializable;
/**
*service层返回对象列表封装
* @param <T>
*/
public class ServiceResult<T> implements Serializable{
private boolean success = false;
private String code;
private String message;
private T result;
private ServiceResult() {
}
public static <T> ServiceResult<T> success(T result) {
ServiceResult<T> item = new ServiceResult<T>();
item.success = true;
item.result = result;
item.code = "0";
item.message = "success";
return item;
}
public static <T> ServiceResult<T> failure(String errorCode, String errorMessage) {
ServiceResult<T> item = new ServiceResult<T>();
item.success = false;
item.code = errorCode;
item.message = errorMessage;
return item;
}
public static <T> ServiceResult<T> failure(String errorCode) {
ServiceResult<T> item = new ServiceResult<T>();
item.success = false;
item.code = errorCode;
item.message = "failure";
return item;
}
public boolean hasResult() {
return result != null;
}
public boolean isSuccess() {
return success;
}
public T getResult() {
return result;
}
public String getCode() {
return code;
}
public String getMessage() {
return message;
}
}
#服务启动端口号。钉钉云ECS目前只开放80和22端口
server.port=8080
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论