Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wecloud_im_server
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
hewei
wecloud_im_server
Commits
3e37cfef
Commit
3e37cfef
authored
May 11, 2021
by
giaogiao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
增加接口:根据客户方生成签名字符串 验证通过则下发token
parent
90b07d5d
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
214 additions
and
18 deletions
+214
-18
bootstrap/src/test/java/io/geekidea/springbootplus/test/SignTest.java
+1
-5
common/src/main/java/com/wecloud/im/controller/AppHelloWorldController.java
+0
-1
common/src/main/java/com/wecloud/im/controller/ImMessageController.java
+12
-12
common/src/main/java/com/wecloud/im/controller/TokenController.java
+44
-0
common/src/main/java/com/wecloud/im/param/ImTokenVerify.java
+30
-0
common/src/main/java/com/wecloud/im/service/ImClientLoginService.java
+23
-0
common/src/main/java/com/wecloud/im/service/impl/ImClientLoginServiceImpl.java
+92
-0
common/src/main/java/com/wecloud/im/vo/TokenVo.java
+12
-0
No files found.
bootstrap/src/test/java/io/geekidea/springbootplus/test/SignTest.java
View file @
3e37cfef
...
...
@@ -11,15 +11,11 @@ import java.util.Date;
/**
* 客户方签名字符串生成 单元测试
*/
//@RunWith(SpringJUnit4ClassRunner.class)
//@SpringBootTest
public
class
SignTest
{
// @Autowired
// private ImClientService imClientService;
/**
* 获取sign,客户端sdk得到sign之后就可以进行登录
和开启websocket
* 获取sign,客户端sdk得到sign之后就可以进行登录
,websocket连接初始化需要带上sign,验证通过才能连接成功
* <p>
* sign = MD5{ clientId + appKey + appSecret}
*
...
...
common/src/main/java/com/wecloud/im/controller/AppHelloWorldController.java
View file @
3e37cfef
...
...
@@ -13,7 +13,6 @@ import org.springframework.web.bind.annotation.RestController;
import
java.io.IOException
;
/**
*
* Hello World Controller
**/
@Slf4j
...
...
common/src/main/java/com/wecloud/im/controller/ImMessageController.java
View file @
3e37cfef
...
...
@@ -33,10 +33,10 @@ import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping
(
"/imMessage"
)
@Api
(
value
=
"消息存储表API"
,
tags
=
{
"消息存储表"
})
public
class
ImMessageController
extends
BaseController
{
public
class
ImMessageController
extends
BaseController
{
@Autowired
private
ImMessageService
imMessageService
;
@Autowired
private
ImMessageService
imMessageService
;
/**
* 添加消息存储表
...
...
@@ -44,8 +44,8 @@ private ImMessageService imMessageService;
@PostMapping
(
"/add"
)
@OperationLog
(
name
=
"添加消息存储表"
,
type
=
OperationLogType
.
ADD
)
@ApiOperation
(
value
=
"添加消息存储表"
)
public
ApiResult
<
Boolean
>
addImMessage
(
@Validated
(
Add
.
class
)
@RequestBody
ImMessage
imMessage
)
throws
Exception
{
boolean
flag
=
imMessageService
.
saveImMessage
(
imMessage
);
public
ApiResult
<
Boolean
>
addImMessage
(
@Validated
(
Add
.
class
)
@RequestBody
ImMessage
imMessage
)
throws
Exception
{
boolean
flag
=
imMessageService
.
saveImMessage
(
imMessage
);
return
ApiResult
.
result
(
flag
);
}
...
...
@@ -55,8 +55,8 @@ private ImMessageService imMessageService;
@PostMapping
(
"/update"
)
@OperationLog
(
name
=
"修改消息存储表"
,
type
=
OperationLogType
.
UPDATE
)
@ApiOperation
(
value
=
"修改消息存储表"
)
public
ApiResult
<
Boolean
>
updateImMessage
(
@Validated
(
Update
.
class
)
@RequestBody
ImMessage
imMessage
)
throws
Exception
{
boolean
flag
=
imMessageService
.
updateImMessage
(
imMessage
);
public
ApiResult
<
Boolean
>
updateImMessage
(
@Validated
(
Update
.
class
)
@RequestBody
ImMessage
imMessage
)
throws
Exception
{
boolean
flag
=
imMessageService
.
updateImMessage
(
imMessage
);
return
ApiResult
.
result
(
flag
);
}
...
...
@@ -66,8 +66,8 @@ private ImMessageService imMessageService;
@PostMapping
(
"/delete/{id}"
)
@OperationLog
(
name
=
"删除消息存储表"
,
type
=
OperationLogType
.
DELETE
)
@ApiOperation
(
value
=
"删除消息存储表"
)
public
ApiResult
<
Boolean
>
deleteImMessage
(
@PathVariable
(
"id"
)
Long
id
)
throws
Exception
{
boolean
flag
=
imMessageService
.
deleteImMessage
(
id
);
public
ApiResult
<
Boolean
>
deleteImMessage
(
@PathVariable
(
"id"
)
Long
id
)
throws
Exception
{
boolean
flag
=
imMessageService
.
deleteImMessage
(
id
);
return
ApiResult
.
result
(
flag
);
}
...
...
@@ -77,7 +77,7 @@ private ImMessageService imMessageService;
@GetMapping
(
"/info/{id}"
)
@OperationLog
(
name
=
"消息存储表详情"
,
type
=
OperationLogType
.
INFO
)
@ApiOperation
(
value
=
"消息存储表详情"
)
public
ApiResult
<
ImMessageQueryVo
>
getImMessage
(
@PathVariable
(
"id"
)
Long
id
)
throws
Exception
{
public
ApiResult
<
ImMessageQueryVo
>
getImMessage
(
@PathVariable
(
"id"
)
Long
id
)
throws
Exception
{
ImMessageQueryVo
imMessageQueryVo
=
imMessageService
.
getImMessageById
(
id
);
return
ApiResult
.
ok
(
imMessageQueryVo
);
}
...
...
@@ -88,10 +88,10 @@ private ImMessageService imMessageService;
@PostMapping
(
"/getPageList"
)
@OperationLog
(
name
=
"消息存储表分页列表"
,
type
=
OperationLogType
.
PAGE
)
@ApiOperation
(
value
=
"消息存储表分页列表"
)
public
ApiResult
<
Paging
<
ImMessageQueryVo
>>
getImMessagePageList
(
@Validated
@RequestBody
ImMessagePageParam
imMessagePageParam
)
throws
Exception
{
public
ApiResult
<
Paging
<
ImMessageQueryVo
>>
getImMessagePageList
(
@Validated
@RequestBody
ImMessagePageParam
imMessagePageParam
)
throws
Exception
{
Paging
<
ImMessageQueryVo
>
paging
=
imMessageService
.
getImMessagePageList
(
imMessagePageParam
);
return
ApiResult
.
ok
(
paging
);
}
}
}
common/src/main/java/com/wecloud/im/controller/TokenController.java
0 → 100644
View file @
3e37cfef
package
com
.
wecloud
.
im
.
controller
;
import
com.wecloud.im.param.ImTokenVerify
;
import
com.wecloud.im.service.ImClientLoginService
;
import
com.wecloud.im.vo.TokenVo
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.common.controller.BaseController
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
/**
* token 控制器
*
* @author wei
* @since 2021-04-27
*/
@Slf4j
@RestController
@RequestMapping
(
"/token"
)
@Api
(
value
=
"token API"
,
tags
=
{
"token相关"
})
public
class
TokenController
extends
BaseController
{
@Autowired
private
ImClientLoginService
imClientLoginService
;
/**
* 根据客户方生成签名字符串 验证通过则下发token
*/
@PostMapping
(
"/verify"
)
@ApiOperation
(
value
=
"验证sign,并返回token"
,
notes
=
"根据客户方生成签名字符串 验证通过则下发token"
)
public
ApiResult
<
TokenVo
>
verify
(
@RequestBody
ImTokenVerify
imTokenVerify
)
throws
Exception
{
return
imClientLoginService
.
verifySign
(
imTokenVerify
);
}
}
common/src/main/java/com/wecloud/im/param/ImTokenVerify.java
0 → 100644
View file @
3e37cfef
package
com
.
wecloud
.
im
.
param
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
/**
* 消息存储表
*
* @author wei
* @since 2021-04-29
*/
@Data
@ApiModel
(
value
=
"ImTokenVerify"
)
public
class
ImTokenVerify
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
"时间戳"
)
private
String
timestemp
;
@ApiModelProperty
(
"client客户端id"
)
private
String
clientId
;
@ApiModelProperty
(
"appkey"
)
private
String
appKey
;
@ApiModelProperty
(
"签名sign"
)
private
String
sign
;
}
common/src/main/java/com/wecloud/im/service/ImClientLoginService.java
0 → 100644
View file @
3e37cfef
package
com
.
wecloud
.
im
.
service
;
import
com.wecloud.im.param.ImTokenVerify
;
import
com.wecloud.im.vo.TokenVo
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
/**
* 终端表 服务类
*
* @author wei
* @since 2021-04-27
*/
public
interface
ImClientLoginService
{
/**
* 根据客户方生成签名字符串 验证通过则下发token
*
* @param imTokenVerify
* @return
*/
ApiResult
<
TokenVo
>
verifySign
(
ImTokenVerify
imTokenVerify
);
}
common/src/main/java/com/wecloud/im/service/impl/ImClientLoginServiceImpl.java
0 → 100644
View file @
3e37cfef
package
com
.
wecloud
.
im
.
service
.
impl
;
import
cn.hutool.core.lang.Snowflake
;
import
cn.hutool.crypto.digest.MD5
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.wecloud.im.entity.ImApplication
;
import
com.wecloud.im.entity.ImClient
;
import
com.wecloud.im.param.ImTokenVerify
;
import
com.wecloud.im.service.ImApplicationService
;
import
com.wecloud.im.service.ImClientLoginService
;
import
com.wecloud.im.service.ImClientService
;
import
com.wecloud.im.tillo.app_ws.utils.RedisUtils
;
import
com.wecloud.im.vo.TokenVo
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.shiro.util.JwtUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.redis.core.StringRedisTemplate
;
import
org.springframework.stereotype.Service
;
import
java.time.Duration
;
@Service
@Slf4j
public
class
ImClientLoginServiceImpl
implements
ImClientLoginService
{
@Autowired
private
RedisUtils
redisUtils
;
@Autowired
private
StringRedisTemplate
redisTemplate
;
@Autowired
private
ImApplicationService
imApplicationService
;
@Autowired
private
ImClientService
imClientService
;
/**
* 根据客户方生成签名字符串 验证通过则下发token
*
* @param imTokenVerify
* @return
*/
@Override
public
ApiResult
<
TokenVo
>
verifySign
(
ImTokenVerify
imTokenVerify
)
{
// 根据appKey从数据库查询密钥
ImApplication
imApplication
=
imApplicationService
.
getOne
(
new
QueryWrapper
<
ImApplication
>().
lambda
().
eq
(
ImApplication:
:
getAppKey
,
imTokenVerify
.
getAppKey
())
);
// 生成以数据库为准的签名
String
mySign
=
new
MD5
().
digestHex
(
imTokenVerify
.
getTimestemp
()
+
imTokenVerify
.
getClientId
()
+
imApplication
.
getAppKey
()
+
imApplication
.
getAppSecret
());
// 验证签名
if
(
mySign
.
equals
(
imTokenVerify
.
getSign
()))
{
log
.
debug
(
"sign一致"
+
mySign
);
}
else
{
log
.
debug
(
"sign不一致"
+
mySign
);
return
ApiResult
.
result
(
ApiCode
.
FAIL
,
null
);
}
// 判断client是否存在
ImClient
client
=
imClientService
.
getOne
(
new
QueryWrapper
<
ImClient
>().
lambda
()
.
eq
(
ImClient:
:
getFkAppid
,
imApplication
.
getId
())
.
eq
(
ImClient:
:
getClientId
,
imTokenVerify
.
getClientId
()));
if
(
client
==
null
)
{
log
.
debug
(
"client不存在,先走注册流程"
);
ImClient
imClient
=
new
ImClient
();
imClient
.
setId
(
new
Snowflake
(
1L
,
1L
).
nextId
());
imClient
.
setFkAppid
(
imApplication
.
getId
());
imClient
.
setClientId
(
imTokenVerify
.
getClientId
());
imClientService
.
save
(
imClient
);
}
// 生成token
String
generateToken
=
JwtUtil
.
generateToken
(
imTokenVerify
.
getClientId
(),
imTokenVerify
.
getAppKey
(),
imApplication
.
getAppSecret
(),
Duration
.
ofDays
(
100
));
// 保存redis
redisTemplate
.
opsForValue
().
set
(
"client:"
+
imApplication
.
getAppKey
()
+
":"
+
imTokenVerify
.
getClientId
(),
generateToken
);
TokenVo
tokenVo
=
new
TokenVo
();
return
ApiResult
.
ok
(
tokenVo
);
}
}
common/src/main/java/com/wecloud/im/vo/TokenVo.java
0 → 100644
View file @
3e37cfef
package
com
.
wecloud
.
im
.
vo
;
import
lombok.Data
;
import
java.io.Serializable
;
@Data
public
class
TokenVo
implements
Serializable
{
String
token
;
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment