Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
D
dingding
Project
Project
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
Graph
比较
统计图
议题
0
议题
0
列表
看板
标记
Milestones
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
注册表
注册表
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
svn
dingding
Commits
65c224e4
提交
65c224e4
authored
3月 10, 2020
作者:
liupengfei
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
--no commit message
上级
c5429da2
隐藏空白字符变更
内嵌
并排
正在显示
8 个修改的文件
包含
349 行增加
和
0 行删除
+349
-0
Application.java
src/main/java/com/Application.java
+15
-0
Constant.java
src/main/java/com/config/Constant.java
+15
-0
URLConstant.java
src/main/java/com/config/URLConstant.java
+18
-0
IndexController.java
src/main/java/com/controller/IndexController.java
+96
-0
AccessTokenUtil.java
src/main/java/com/util/AccessTokenUtil.java
+41
-0
LogFormatter.java
src/main/java/com/util/LogFormatter.java
+92
-0
ServiceResult.java
src/main/java/com/util/ServiceResult.java
+67
-0
application.properties
src/main/resources/application.properties
+5
-0
没有找到文件。
src/main/java/com/Application.java
0 → 100644
浏览文件 @
65c224e4
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
);
}
}
src/main/java/com/config/Constant.java
0 → 100644
浏览文件 @
65c224e4
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"
;
}
src/main/java/com/config/URLConstant.java
0 → 100644
浏览文件 @
65c224e4
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"
;
}
src/main/java/com/controller/IndexController.java
0 → 100644
浏览文件 @
65c224e4
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
;
}
}
}
src/main/java/com/util/AccessTokenUtil.java
0 → 100644
浏览文件 @
65c224e4
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
);
}
}
src/main/java/com/util/LogFormatter.java
0 → 100644
浏览文件 @
65c224e4
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
);
}
}
}
src/main/java/com/util/ServiceResult.java
0 → 100644
浏览文件 @
65c224e4
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
;
}
}
src/main/resources/application.properties
0 → 100644
浏览文件 @
65c224e4
#服务启动端口号。钉钉云ECS目前只开放80和22端口
server.port
=
8080
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论