Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
dd_school
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
wangqi
dd_school
Commits
ed2928a3
Commit
ed2928a3
authored
Aug 22, 2023
by
baochunxin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
#G:修改图片为路径,上传模板推送加密
parent
10837540
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
317 additions
and
27 deletions
+317
-27
core-common/src/main/java/com/core/domain/VerificationCodeParam.java
+27
-0
smart-campus/src/main/java/yangtz/cs/liu/campus/controller/notificationGroup/SchoolNotificationGroupController.java
+1
-1
smart-campus/src/main/java/yangtz/cs/liu/wechat/controller/api/VxTemlateController.java
+67
-0
smart-campus/src/main/java/yangtz/cs/liu/wechat/controller/api/WxLoginController.java
+14
-14
smart-campus/src/main/java/yangtz/cs/liu/wechat/controller/introduce/WxSchoolPicController.java
+5
-6
smart-campus/src/main/java/yangtz/cs/liu/wechat/controller/schoolDcwj/WxSchoolDcwjController.java
+1
-5
smart-campus/src/main/java/yangtz/cs/liu/wechat/utils/CheckUtil.java
+92
-0
smart-campus/src/main/java/yangtz/cs/liu/wechat/utils/MD5Utils.java
+36
-0
smart-campus/src/main/java/yangtz/cs/liu/wechat/utils/MapKeyComparator.java
+13
-0
smart-campus/src/main/java/yangtz/cs/liu/wechat/utils/SignUtil.java
+16
-0
smart-campus/src/main/java/yangtz/cs/liu/wechat/utils/TimestampUtil.java
+44
-0
smart-campus/src/main/resources/mapper/teacher/SchoolTeacherMapper.xml
+1
-1
No files found.
core-common/src/main/java/com/core/domain/VerificationCodeParam.java
0 → 100644
View file @
ed2928a3
package
com
.
core
.
domain
;
import
com.fasterxml.jackson.annotation.JsonProperty
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.Objects
;
import
lombok.Data
;
@Data
public
class
VerificationCodeParam
{
//签名
private
String
sign
;
//时间戳
private
long
TimeStamp
;
/**
* 业务参数
*/
private
HashMap
<
String
,
Object
>
map
;
}
\ No newline at end of file
smart-campus/src/main/java/yangtz/cs/liu/campus/controller/notificationGroup/SchoolNotificationGroupController.java
View file @
ed2928a3
...
@@ -94,7 +94,7 @@ public class SchoolNotificationGroupController extends BaseController {
...
@@ -94,7 +94,7 @@ public class SchoolNotificationGroupController extends BaseController {
* @return 单条数据
* @return 单条数据
*/
*/
@GetMapping
(
"/selectOne/{id}"
)
@GetMapping
(
"/selectOne/{id}"
)
public
AjaxResult
selectOne
(
@PathVariable
Serializable
id
)
{
public
AjaxResult
selectOne
(
@PathVariable
(
"id"
)
Serializable
id
)
{
return
AjaxResult
.
success
(
this
.
schoolNotificationGroupService
.
getById
(
id
));
return
AjaxResult
.
success
(
this
.
schoolNotificationGroupService
.
getById
(
id
));
}
}
...
...
smart-campus/src/main/java/yangtz/cs/liu/wechat/controller/api/VxTemlateController.java
0 → 100644
View file @
ed2928a3
package
yangtz
.
cs
.
liu
.
wechat
.
controller
.
api
;
import
com.core.domain.VerificationCodeParam
;
import
com.ruoyi.common.core.domain.AjaxResult
;
import
java.util.Date
;
import
java.util.HashMap
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
yangtz.cs.liu.campus.domain.temp.AuditoriumTemplate
;
import
yangtz.cs.liu.wechat.service.api.IWxApiService
;
import
yangtz.cs.liu.wechat.utils.SignUtil
;
import
yangtz.cs.liu.wechat.utils.TimestampUtil
;
/**
* 微信模板推送
*/
@RestController
(
"/vx/temlate"
)
public
class
VxTemlateController
{
@Autowired
IWxApiService
iWxApiService
;
private
String
ticketSecret
=
"71_0xakqv3T3ORjyXPeP-s2rwRcAqDbMEmmmkfMQeeJJmXBM8g-W4p4oa5BKisL-FYVHMzLJLyzbhgFQUfOkBW8Ufr4SWTTgGpjGs-BmIi8V95ct5hAXtQ47xDetjoLSSiAFAXEE"
;
/**
* {{first.DATA}} 标题
* 申请人:{{keyword1.DATA}}
* 申请内容:{{keyword2.DATA}}
* 申请时间:{{keyword3.DATA}}
* {{remark.DATA}} 备注信息
* @return
*/
@PostMapping
(
"/sendTemlate"
)
private
AjaxResult
sendTemlate
(
VerificationCodeParam
param
){
Boolean
flag
=
false
;
String
msg
=
""
;
// 验证信息是否被篡改
if
(!
SignUtil
.
validateMessage
(
param
,
ticketSecret
))
{
flag
=
true
;
msg
=
"签名验证失败"
;
}
// 验证时间戳,防止重复提交
Boolean
validateResult
=
TimestampUtil
.
validateTimestamp
(
"verificationCode"
,
param
.
getTimeStamp
());
if
(!
validateResult
)
{
flag
=
true
;
msg
=
"验证时间戳不合法"
;
}
if
(
flag
){
AjaxResult
.
error
(
msg
);
}
HashMap
<
String
,
Object
>
map
=
param
.
getMap
();
// 发送模板
AuditoriumTemplate
auditoriumTemplate
=
new
AuditoriumTemplate
();
auditoriumTemplate
.
setApplyTime
((
Date
)
map
.
get
(
"applyTime"
));
auditoriumTemplate
.
setRemark
(
map
.
get
(
"remark"
).
toString
());
auditoriumTemplate
.
setContent
(
map
.
get
(
"content"
).
toString
());
auditoriumTemplate
.
setApplyUser
(
map
.
get
(
"applyUser"
).
toString
());
auditoriumTemplate
.
setToUserOpenId
(
map
.
get
(
"toUserOpenId"
).
toString
());
auditoriumTemplate
.
setFirst
(
map
.
get
(
"first"
).
toString
());
String
s
=
iWxApiService
.
sendAuditoriumTemplate
(
auditoriumTemplate
);
return
AjaxResult
.
success
(
s
);
}
}
smart-campus/src/main/java/yangtz/cs/liu/wechat/controller/api/WxLoginController.java
View file @
ed2928a3
...
@@ -111,22 +111,22 @@ public class WxLoginController extends BaseController {
...
@@ -111,22 +111,22 @@ public class WxLoginController extends BaseController {
//家长登录获取学生头像
//家长登录获取学生头像
if
(
user
.
getUserLoginType
().
equals
(
PARENT_LOGIN
)){
if
(
user
.
getUserLoginType
().
equals
(
PARENT_LOGIN
)){
SchoolStudent
student
=
studentService
.
getById
(
user
.
getStudentId
());
SchoolStudent
student
=
studentService
.
getById
(
user
.
getStudentId
());
if
(
StringUtils
.
isNotNull
(
student
.
getAvatar
())
&&
!
""
.
equals
(
student
.
getAvatar
())){
//
if(StringUtils.isNotNull(student.getAvatar()) && !"".equals(student.getAvatar())){
String
url
=
serverAddress
+
student
.
getAvatar
();
//
String url = serverAddress+student.getAvatar();
byte
[]
b
=
ImageUtils
.
readFile
(
url
);
//
byte[] b = ImageUtils.readFile(url);
//转为base64传过去
//
//转为base64传过去
String
base64
=
Base64
.
encodeBase64String
(
b
);
//
String base64 = Base64.encodeBase64String(b);
student
.
setAvatar
(
"data:image/jpeg;base64,"
+
base64
);
//
student.setAvatar("data:image/jpeg;base64,"+base64);
}
//
}
mpLoginUser
.
setAvatar
(
student
.
getAvatar
());
mpLoginUser
.
setAvatar
(
student
.
getAvatar
());
}
else
{
}
else
{
if
(
StringUtils
.
isNotNull
(
user
.
getAvatar
())
&&
!
""
.
equals
(
user
.
getAvatar
())){
//
if(StringUtils.isNotNull(user.getAvatar()) && !"".equals(user.getAvatar())){
String
url
=
serverAddress
+
user
.
getAvatar
();
//
String url = serverAddress+user.getAvatar();
byte
[]
b
=
ImageUtils
.
readFile
(
url
);
//
byte[] b = ImageUtils.readFile(url);
//转为base64传过去
//
//转为base64传过去
String
base64
=
Base64
.
encodeBase64String
(
b
);
//
String base64 = Base64.encodeBase64String(b);
user
.
setAvatar
(
"data:image/jpeg;base64,"
+
base64
);
//
user.setAvatar("data:image/jpeg;base64,"+base64);
}
//
}
mpLoginUser
.
setAvatar
(
user
.
getAvatar
());
mpLoginUser
.
setAvatar
(
user
.
getAvatar
());
}
}
// 角色集合
// 角色集合
...
...
smart-campus/src/main/java/yangtz/cs/liu/wechat/controller/introduce/WxSchoolPicController.java
View file @
ed2928a3
...
@@ -6,6 +6,7 @@ import com.ruoyi.common.core.domain.AjaxResult;
...
@@ -6,6 +6,7 @@ import com.ruoyi.common.core.domain.AjaxResult;
import
com.ruoyi.common.utils.StringUtils
;
import
com.ruoyi.common.utils.StringUtils
;
import
com.ruoyi.common.utils.file.ImageUtils
;
import
com.ruoyi.common.utils.file.ImageUtils
;
import
com.ruoyi.framework.util.UserInfoUtil
;
import
com.ruoyi.framework.util.UserInfoUtil
;
import
java.util.ArrayList
;
import
org.apache.commons.codec.binary.Base64
;
import
org.apache.commons.codec.binary.Base64
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.beans.factory.annotation.Value
;
...
@@ -43,20 +44,18 @@ public class WxSchoolPicController extends BaseController {
...
@@ -43,20 +44,18 @@ public class WxSchoolPicController extends BaseController {
@GetMapping
(
"/schoolPiclist"
)
@GetMapping
(
"/schoolPiclist"
)
public
AjaxResult
SchoolPiclist
()
{
public
AjaxResult
SchoolPiclist
()
{
try
{
try
{
List
<
String
>
listUrl
=
new
ArrayList
<>();
LambdaQueryWrapper
<
SchoolPic
>
lqw
=
new
LambdaQueryWrapper
<>();
LambdaQueryWrapper
<
SchoolPic
>
lqw
=
new
LambdaQueryWrapper
<>();
lqw
.
eq
(
SchoolPic:
:
getIsShow
,
1
);
lqw
.
eq
(
SchoolPic:
:
getIsShow
,
1
);
List
<
SchoolPic
>
list
=
schoolPicService
.
list
(
lqw
);
List
<
SchoolPic
>
list
=
schoolPicService
.
list
(
lqw
);
for
(
SchoolPic
pic
:
list
){
for
(
SchoolPic
pic
:
list
){
//图片路径不为空
//图片路径不为空
if
(
StringUtils
.
isNotNull
(
pic
.
getPicUrl
())
&&
!
""
.
equals
(
pic
.
getPicUrl
())){
if
(
StringUtils
.
isNotNull
(
pic
.
getPicUrl
())
&&
!
""
.
equals
(
pic
.
getPicUrl
())){
String
url
=
serverAddress
+
pic
.
getPicUrl
();
String
url
=
pic
.
getPicUrl
();
byte
[]
b
=
ImageUtils
.
readFile
(
url
);
listUrl
.
add
(
url
);
//转为base64传过去
String
base64
=
Base64
.
encodeBase64String
(
b
);
pic
.
setPicUrl
(
"data:image/jpeg;base64,"
+
base64
);
}
}
}
}
return
AjaxResult
.
success
(
list
);
return
AjaxResult
.
success
(
list
Url
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
return
AjaxResult
.
error
();
return
AjaxResult
.
error
();
}
}
...
...
smart-campus/src/main/java/yangtz/cs/liu/wechat/controller/schoolDcwj/WxSchoolDcwjController.java
View file @
ed2928a3
...
@@ -102,11 +102,7 @@ public class WxSchoolDcwjController extends BaseController {
...
@@ -102,11 +102,7 @@ public class WxSchoolDcwjController extends BaseController {
for
(
Vo_SchoolDcwjNr
nr
:
list
){
for
(
Vo_SchoolDcwjNr
nr
:
list
){
if
(
PIC
.
equals
(
nr
.
getNrLx
())){
if
(
PIC
.
equals
(
nr
.
getNrLx
())){
if
(
StringUtils
.
isNotNull
(
nr
.
getUserAnswer
())
&&
!
""
.
equals
(
nr
.
getUserAnswer
())){
if
(
StringUtils
.
isNotNull
(
nr
.
getUserAnswer
())
&&
!
""
.
equals
(
nr
.
getUserAnswer
())){
String
url
=
serverAddress
+
nr
.
getUserAnswer
();
nr
.
getUserAnswer
();
byte
[]
b
=
ImageUtils
.
readFile
(
url
);
//转为base64传过去
String
base64
=
Base64
.
encodeBase64String
(
b
);
nr
.
setPicData
(
"data:image/jpeg;base64,"
+
base64
);
}
}
}
}
}
}
...
...
smart-campus/src/main/java/yangtz/cs/liu/wechat/utils/CheckUtil.java
0 → 100644
View file @
ed2928a3
package
yangtz
.
cs
.
liu
.
wechat
.
utils
;
import
java.util.HashMap
;
import
java.util.Iterator
;
import
java.util.Map
;
import
java.util.TreeMap
;
public
class
CheckUtil
{
private
String
secret
;
private
Map
<
String
,
Object
>
map
=
new
HashMap
<
String
,
Object
>();
public
CheckUtil
(
String
secret
)
{
this
.
secret
=
secret
;
}
/**
* 添加参数
* @param key
* @param value
*/
public
void
setValue
(
String
key
,
Object
value
)
{
map
.
put
(
key
,
value
);
}
/**
* 检验签名是否正确
* @param sign
* @return
*/
public
boolean
checkSign
(
String
sign
)
{
if
(
sign
==
null
||
sign
==
""
)
{
return
false
;
}
//本地计算新的签名
String
cal_sign
=
makeSign
();
if
(
cal_sign
.
equals
(
sign
))
{
return
true
;
}
else
{
return
false
;
}
}
/**
* 生成签名
* @return
*/
public
String
makeSign
()
{
//拼接数据
String
str
=
buildData
();
//在拼接的数据后拼入API KEY
str
+=
"&key="
+
secret
;
//MD5加密
String
re
=
MD5Utils
.
encrypt
(
str
);
//所有字符串转成大写
return
re
.
toUpperCase
();
}
/**
* 拼接数据
* @return
*/
private
String
buildData
()
{
String
str
=
""
;
Map
<
String
,
Object
>
resultMap
=
sortMapByKey
(
map
);
Iterator
<
String
>
it
=
resultMap
.
keySet
().
iterator
();
while
(
it
.
hasNext
())
{
String
key
=
it
.
next
();
Object
value
=
resultMap
.
get
(
key
);
str
+=
key
+
"="
+
value
+
"&"
;
}
str
=
str
.
substring
(
0
,
str
.
length
()
-
1
);
return
str
;
}
/**
* 使用 Map按key进行排序(这里重写了比较器的compare方法按升序排序)
* @param map
* @return
*/
public
static
Map
<
String
,
Object
>
sortMapByKey
(
Map
<
String
,
Object
>
map
){
if
(
map
==
null
||
map
.
isEmpty
())
{
return
null
;
}
Map
<
String
,
Object
>
sortMap
=
new
TreeMap
<
String
,
Object
>(
new
MapKeyComparator
());
sortMap
.
putAll
(
map
);
return
sortMap
;
}
}
\ No newline at end of file
smart-campus/src/main/java/yangtz/cs/liu/wechat/utils/MD5Utils.java
0 → 100644
View file @
ed2928a3
package
yangtz
.
cs
.
liu
.
wechat
.
utils
;
import
java.security.MessageDigest
;
import
java.security.NoSuchAlgorithmException
;
public
class
MD5Utils
{
public
final
static
String
encrypt
(
String
s
)
{
char
hexDigits
[]
=
{
'0'
,
'1'
,
'2'
,
'3'
,
'4'
,
'5'
,
'6'
,
'7'
,
'8'
,
'9'
,
'A'
,
'B'
,
'C'
,
'D'
,
'E'
,
'F'
};
byte
[]
byteInput
=
s
.
getBytes
();
//获取MD5摘要算法的MessageDigest对象
try
{
MessageDigest
mdInst
=
MessageDigest
.
getInstance
(
"MD5"
);
//使用指定的字节更新摘要
mdInst
.
update
(
byteInput
);
//获得密文
byte
[]
md
=
mdInst
.
digest
();
// 把密文转换成十六进制的字符串形式
int
j
=
md
.
length
;
char
str
[]
=
new
char
[
j
*
2
];
//char占两个字节
int
k
=
0
;
for
(
int
i
=
0
;
i
<
j
;
i
++)
{
byte
byte0
=
md
[
i
];
str
[
k
++]
=
hexDigits
[
byte0
>>>
4
&
0xf
];
str
[
k
++]
=
hexDigits
[
byte0
&
0xf
];
//右移四位,高四位清空 取低四位的值
}
return
new
String
(
str
);
}
catch
(
NoSuchAlgorithmException
e
)
{
e
.
printStackTrace
();
}
return
null
;
}
}
\ No newline at end of file
smart-campus/src/main/java/yangtz/cs/liu/wechat/utils/MapKeyComparator.java
0 → 100644
View file @
ed2928a3
package
yangtz
.
cs
.
liu
.
wechat
.
utils
;
import
java.util.Comparator
;
public
class
MapKeyComparator
implements
Comparator
<
String
>
{
public
int
compare
(
String
str1
,
String
str2
)
{
return
str1
.
compareTo
(
str2
);
//升序排序
}
}
\ No newline at end of file
smart-campus/src/main/java/yangtz/cs/liu/wechat/utils/SignUtil.java
0 → 100644
View file @
ed2928a3
package
yangtz
.
cs
.
liu
.
wechat
.
utils
;
import
com.core.domain.VerificationCodeParam
;
public
class
SignUtil
{
public
static
boolean
validateMessage
(
VerificationCodeParam
param
,
String
secretKey
)
{
CheckUtil
check
=
new
CheckUtil
(
secretKey
);
check
.
setValue
(
"timeStamp"
,
param
.
getTimeStamp
());
boolean
result
=
check
.
checkSign
(
param
.
getSign
());
return
result
;
}
}
\ No newline at end of file
smart-campus/src/main/java/yangtz/cs/liu/wechat/utils/TimestampUtil.java
0 → 100644
View file @
ed2928a3
package
yangtz
.
cs
.
liu
.
wechat
.
utils
;
import
java.util.Date
;
public
class
TimestampUtil
{
/**
* 验证时间戳是否合法
* @param cacheKey
* @param currentTimestamp
* @return
*/
public
static
Boolean
validateTimestamp
(
String
cacheKey
,
long
currentTimestamp
)
{
long
beforeTimeStamp
=
0
;
// //当前时间戳小于或等于之前的时间戳。说明是重复的
if
(
currentTimestamp
<
beforeTimeStamp
&&
beforeTimeStamp
>
0
)
{
return
false
;
}
//session可能会超时
long
nowTimeStamp
=
getSecondTimestampTwo
(
new
Date
());
if
(
nowTimeStamp
-
currentTimestamp
>
3000000
)
{
return
false
;
}
return
true
;
}
/**
* 精确到秒的时间戳
* @param date
* @return
*/
private
static
long
getSecondTimestampTwo
(
Date
date
)
{
if
(
null
==
date
)
{
return
0
;
}
String
timestamp
=
String
.
valueOf
(
date
.
getTime
()/
1000
);
return
Long
.
parseLong
(
timestamp
);
}
}
\ No newline at end of file
smart-campus/src/main/resources/mapper/teacher/SchoolTeacherMapper.xml
View file @
ed2928a3
...
@@ -225,7 +225,7 @@
...
@@ -225,7 +225,7 @@
<if
test=
"createTime != null"
>
create_time = #{createTime},
</if>
<if
test=
"createTime != null"
>
create_time = #{createTime},
</if>
<if
test=
"updateBy != null"
>
update_by = #{updateBy},
</if>
<if
test=
"updateBy != null"
>
update_by = #{updateBy},
</if>
<if
test=
"updateTime != null"
>
update_time = #{updateTime},
</if>
<if
test=
"updateTime != null"
>
update_time = #{updateTime},
</if>
<if
test=
"delFlag != null and delFlag != ''"
>
del_flag = #{delFlag}
,
</if>
<if
test=
"delFlag != null and delFlag != ''"
>
del_flag = #{delFlag}
</if>
</trim>
</trim>
where id = #{id}
where id = #{id}
</update>
</update>
...
...
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