Commit ed2928a3 by baochunxin

#G:修改图片为路径,上传模板推送加密

parent 10837540
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
......@@ -94,7 +94,7 @@ public class SchoolNotificationGroupController extends BaseController {
* @return 单条数据
*/
@GetMapping("/selectOne/{id}")
public AjaxResult selectOne(@PathVariable Serializable id) {
public AjaxResult selectOne(@PathVariable("id") Serializable id) {
return AjaxResult.success(this.schoolNotificationGroupService.getById(id));
}
......
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);
}
}
......@@ -111,22 +111,22 @@ public class WxLoginController extends BaseController {
//家长登录获取学生头像
if(user.getUserLoginType().equals(PARENT_LOGIN)){
SchoolStudent student = studentService.getById(user.getStudentId());
if(StringUtils.isNotNull(student.getAvatar()) && !"".equals(student.getAvatar())){
String url = serverAddress+student.getAvatar();
byte[] b = ImageUtils.readFile(url);
//转为base64传过去
String base64 = Base64.encodeBase64String(b);
student.setAvatar("data:image/jpeg;base64,"+base64);
}
// if(StringUtils.isNotNull(student.getAvatar()) && !"".equals(student.getAvatar())){
// String url = serverAddress+student.getAvatar();
// byte[] b = ImageUtils.readFile(url);
// //转为base64传过去
// String base64 = Base64.encodeBase64String(b);
// student.setAvatar("data:image/jpeg;base64,"+base64);
// }
mpLoginUser.setAvatar(student.getAvatar());
}else{
if(StringUtils.isNotNull(user.getAvatar()) && !"".equals(user.getAvatar())){
String url = serverAddress+user.getAvatar();
byte[] b = ImageUtils.readFile(url);
//转为base64传过去
String base64 = Base64.encodeBase64String(b);
user.setAvatar("data:image/jpeg;base64,"+base64);
}
// if(StringUtils.isNotNull(user.getAvatar()) && !"".equals(user.getAvatar())){
// String url = serverAddress+user.getAvatar();
// byte[] b = ImageUtils.readFile(url);
// //转为base64传过去
// String base64 = Base64.encodeBase64String(b);
// user.setAvatar("data:image/jpeg;base64,"+base64);
// }
mpLoginUser.setAvatar(user.getAvatar());
}
// 角色集合
......
......@@ -6,6 +6,7 @@ import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.file.ImageUtils;
import com.ruoyi.framework.util.UserInfoUtil;
import java.util.ArrayList;
import org.apache.commons.codec.binary.Base64;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
......@@ -43,20 +44,18 @@ public class WxSchoolPicController extends BaseController {
@GetMapping("/schoolPiclist")
public AjaxResult SchoolPiclist () {
try {
List<String> listUrl = new ArrayList<>();
LambdaQueryWrapper<SchoolPic> lqw = new LambdaQueryWrapper<>();
lqw.eq(SchoolPic::getIsShow, 1);
List<SchoolPic> list = schoolPicService.list(lqw);
for(SchoolPic pic : list){
//图片路径不为空
if(StringUtils.isNotNull(pic.getPicUrl()) && !"".equals(pic.getPicUrl())){
String url = serverAddress+pic.getPicUrl();
byte[] b = ImageUtils.readFile(url);
//转为base64传过去
String base64 = Base64.encodeBase64String(b);
pic.setPicUrl("data:image/jpeg;base64,"+base64);
String url = pic.getPicUrl();
listUrl.add(url);
}
}
return AjaxResult.success(list);
return AjaxResult.success(listUrl);
} catch (Exception e) {
return AjaxResult.error();
}
......
......@@ -102,11 +102,7 @@ public class WxSchoolDcwjController extends BaseController {
for(Vo_SchoolDcwjNr nr : list){
if(PIC.equals(nr.getNrLx())){
if(StringUtils.isNotNull(nr.getUserAnswer()) && !"".equals(nr.getUserAnswer())){
String url = serverAddress+nr.getUserAnswer();
byte[] b = ImageUtils.readFile(url);
//转为base64传过去
String base64 = Base64.encodeBase64String(b);
nr.setPicData("data:image/jpeg;base64,"+base64);
nr.getUserAnswer();
}
}
}
......
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
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
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
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
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
......@@ -225,7 +225,7 @@
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</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>
where id = #{id}
</update>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment