From 44d56da26a88092b98936d7c69ec093b48cacbf4 Mon Sep 17 00:00:00 2001 From: 13405411873 <1994398261@qq.com> Date: Sat, 5 Oct 2024 11:42:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=A3=80=E6=B5=8B=E7=9B=B8?= =?UTF-8?q?=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dl-module-base/pom.xml | 6 +- .../admin/user/UserProfileController.java | 11 +- .../controller/admin/util/RedisUtil.java | 286 ++++++++++++++++++ .../controller/admin/util/WechatPushUtil.java | 42 +++ 4 files changed, 341 insertions(+), 4 deletions(-) create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/util/RedisUtil.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/util/WechatPushUtil.java diff --git a/dl-module-base/pom.xml b/dl-module-base/pom.xml index 264e25bd..ffce3d1c 100644 --- a/dl-module-base/pom.xml +++ b/dl-module-base/pom.xml @@ -90,7 +90,11 @@ yudao-spring-boot-starter-test test - + + cn.hutool + hutool-all + 5.8.29 + cn.iocoder.boot diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserProfileController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserProfileController.java index 70c64f13..adaf4d1d 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserProfileController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserProfileController.java @@ -10,6 +10,7 @@ import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfi import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserSaveReqVO; +import cn.iocoder.yudao.module.system.controller.admin.util.WechatPushUtil; import cn.iocoder.yudao.module.system.convert.user.UserConvert; import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; import cn.iocoder.yudao.module.system.dal.dataobject.dept.PostDO; @@ -35,8 +36,7 @@ import java.util.List; import java.util.Map; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.ok; -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.*; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.FILE_IS_EMPTY; @@ -105,11 +105,16 @@ public class UserProfileController { @PutMapping("/updateNickName") public CommonResult updateNickName(@RequestBody Map user) { LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); + // 获得用户基本信息 + AdminUserDO nowUser = userService.getUser(getLoginUserId()); UserSaveReqVO userSaveReqVO = new UserSaveReqVO(); userSaveReqVO.setId(loginUser.getId()); userSaveReqVO.setNickname((String) user.get("realName")); + WechatPushUtil wechatPushUtil =new WechatPushUtil(); + if (!wechatPushUtil.msgSecCheck(nowUser.getJcOpenId(),(String) user.get("realName")).equals("pass")){ + return error(500,"存在敏感信息"); + } userService.updateUser(userSaveReqVO); - return ok(); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/util/RedisUtil.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/util/RedisUtil.java new file mode 100644 index 00000000..9ffea232 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/util/RedisUtil.java @@ -0,0 +1,286 @@ +package cn.iocoder.yudao.module.system.controller.admin.util; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.BoundSetOperations; +import org.springframework.data.redis.core.HashOperations; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.ValueOperations; +import org.springframework.stereotype.Component; + +import java.util.*; +import java.util.concurrent.TimeUnit; + +/** + * spring redis 工具类 + * + * @author ruoyi + **/ +@SuppressWarnings(value = { "unchecked", "rawtypes" }) +@Component("RedisUtil2") +public class RedisUtil +{ + @Autowired + public RedisTemplate redisTemplate; + + /** + * 缓存基本的对象,Integer、String、实体类等 + * + * @param key 缓存的键值 + * @param value 缓存的值 + */ + public void setCacheObject(final String key, final T value) + { + redisTemplate.opsForValue().set(key, value); + } + + /** + * 缓存基本的对象,Integer、String、实体类等 + * + * @param key 缓存的键值 + * @param value 缓存的值 + * @param timeout 时间 + * @param timeUnit 时间颗粒度 + */ + public void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit) + { + redisTemplate.opsForValue().set(key, value, timeout, timeUnit); + } + + /** + * 设置有效时间 + * + * @param key Redis键 + * @param timeout 超时时间 + * @return true=设置成功;false=设置失败 + */ + public boolean expire(final String key, final long timeout) + { + return expire(key, timeout, TimeUnit.SECONDS); + } + + /** + * 设置有效时间 + * + * @param key Redis键 + * @param timeout 超时时间 + * @param unit 时间单位 + * @return true=设置成功;false=设置失败 + */ + public boolean expire(final String key, final long timeout, final TimeUnit unit) + { + return redisTemplate.expire(key, timeout, unit); + } + + /** + * 获取有效时间 + * + * @param key Redis键 + * @return 有效时间 + */ + public long getExpire(final String key) + { + return redisTemplate.getExpire(key); + } + + /** + * 判断 key是否存在 + * + * @param key 键 + * @return true 存在 false不存在 + */ + public Boolean hasKey(String key) + { + return redisTemplate.hasKey(key); + } + + /** + * 获得缓存的基本对象。 + * + * @param key 缓存键值 + * @return 缓存键值对应的数据 + */ + public T getCacheObject(final String key) + { + ValueOperations operation = redisTemplate.opsForValue(); + return operation.get(key); + } + + /** + * 删除单个对象 + * + * @param key + */ + public boolean deleteObject(final String key) + { + return redisTemplate.delete(key); + } + + /** + * 删除集合对象 + * + * @param collection 多个对象 + * @return + */ + public boolean deleteObject(final Collection collection) + { + return redisTemplate.delete(collection) > 0; + } + + /** + * 缓存List数据 + * + * @param key 缓存的键值 + * @param dataList 待缓存的List数据 + * @return 缓存的对象 + */ + public long setCacheList(final String key, final List dataList) + { + Long count = redisTemplate.opsForList().rightPushAll(key, dataList); + return count == null ? 0 : count; + } + /** + * 追加缓存List数据 + * + * @param key 缓存的键值 + * @param data 待缓存的数据 + * @return 缓存的对象 + */ + public long addCacheList(final String key, final T data) + { + Long count = redisTemplate.opsForList().rightPush(key,data); + return count == null ? 0 : count; + } + /** + * 删除缓存List数据 + * + * @param key 缓存的键值 + * @return 缓存的对象 + */ + public void delCacheList(final String key,long timeout, TimeUnit unit) + { + redisTemplate.opsForList().leftPop(key,timeout,unit); + } + /** + * 获得缓存的list对象 + * + * @param key 缓存的键值 + * @return 缓存键值对应的数据 + */ + public List getCacheList(final String key) + { + return redisTemplate.opsForList().range(key, 0, -1); + } + + /** + * 缓存Set + * + * @param key 缓存键值 + * @param dataSet 缓存的数据 + * @return 缓存数据的对象 + */ + public BoundSetOperations setCacheSet(final String key, final Set dataSet) + { + BoundSetOperations setOperation = redisTemplate.boundSetOps(key); + Iterator it = dataSet.iterator(); + while (it.hasNext()) + { + setOperation.add(it.next()); + } + return setOperation; + } + + /** + * 获得缓存的set + * + * @param key + * @return + */ + public Set getCacheSet(final String key) + { + return redisTemplate.opsForSet().members(key); + } + + /** + * 缓存Map + * + * @param key + * @param dataMap + */ + public void setCacheMap(final String key, final Map dataMap) + { + if (dataMap != null) { + redisTemplate.opsForHash().putAll(key, dataMap); + } + } + + /** + * 获得缓存的Map + * + * @param key + * @return + */ + public Map getCacheMap(final String key) + { + return redisTemplate.opsForHash().entries(key); + } + + /** + * 往Hash中存入数据 + * + * @param key Redis键 + * @param hKey Hash键 + * @param value 值 + */ + public void setCacheMapValue(final String key, final String hKey, final T value) + { + redisTemplate.opsForHash().put(key, hKey, value); + } + + /** + * 获取Hash中的数据 + * + * @param key Redis键 + * @param hKey Hash键 + * @return Hash中的对象 + */ + public T getCacheMapValue(final String key, final String hKey) + { + HashOperations opsForHash = redisTemplate.opsForHash(); + return opsForHash.get(key, hKey); + } + + /** + * 获取多个Hash中的数据 + * + * @param key Redis键 + * @param hKeys Hash键集合 + * @return Hash对象集合 + */ + public List getMultiCacheMapValue(final String key, final Collection hKeys) + { + return redisTemplate.opsForHash().multiGet(key, hKeys); + } + + /** + * 删除Hash中的某条数据 + * + * @param key Redis键 + * @param hKey Hash键 + * @return 是否成功 + */ + public boolean deleteCacheMapValue(final String key, final String hKey) + { + return redisTemplate.opsForHash().delete(key, hKey) > 0; + } + + /** + * 获得缓存的基本对象列表 + * + * @param pattern 字符串前缀 + * @return 对象列表 + */ + public Collection keys(final String pattern) + { + return redisTemplate.keys(pattern); + } +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/util/WechatPushUtil.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/util/WechatPushUtil.java new file mode 100644 index 00000000..c3f1d9fd --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/util/WechatPushUtil.java @@ -0,0 +1,42 @@ +package cn.iocoder.yudao.module.system.controller.admin.util; + +import cn.hutool.http.HttpUtil; +import com.alibaba.fastjson.JSONObject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.cache.RedisCache; + +import java.util.concurrent.TimeUnit; + +public class WechatPushUtil { + @Autowired + private RedisUtil redisCache; + private final String tokenUrl = "https://api.weixin.qq.com/cgi-bin/token"; + private final String msgSecCheckUrl = "https://api.weixin.qq.com/wxa/msg_sec_check?access_token="; + + public String getSeccessToken(){ + if (redisCache.hasKey("access_token")){ + return redisCache.getCacheObject("access_token").toString(); + }else { + String token = HttpUtil.get(tokenUrl+"?grant_type=client_credential&appid=wx102bcb3e2601f99a&secret=1111cef0b5dec92899299d25624e9adc"); + String access_token = JSONObject.parseObject(token).get("access_token").toString(); + redisCache.setCacheObject("access_token",access_token,7000, TimeUnit.SECONDS); + return access_token; + } + } + public String msgSecCheck(String openid,String content) { + try{ + JSONObject jsonObject = new JSONObject(); + jsonObject.put("openid",openid); + jsonObject.put("scene",2); + jsonObject.put("version",2); + jsonObject.put("content",content); + String s = JSONObject.toJSONString(jsonObject); + String seccessToken = this.getSeccessToken(); + String post = HttpUtil.post(msgSecCheckUrl + seccessToken, s); + return JSONObject.parseObject(JSONObject.parseObject(post).get("result").toString()).get("suggest").toString(); + }catch (Exception e){ + System.out.println(e); + } + return "pass"; + } +}