登录
注册
开源
企业版
高校版
搜索
帮助中心
使用条款
关于我们
开源
企业版
高校版
私有云
模力方舟
我知道了
查看详情
登录
注册
代码拉取完成,页面将自动刷新
开源项目
>
建站系统
>
新零售/网店/商城
&&
捐赠
捐赠前请先登录
取消
前往登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
Watch
不关注
关注所有动态
仅关注版本发行动态
关注但不提醒动态
930
Star
10.3K
Fork
4.3K
ZKMALL
/
ZKMALL-B2B2C多商户Java商城后台
代码
Issues
0
Pull Requests
0
Wiki
统计
流水线
服务
Gitee Pages
JavaDoc
质量分析
Jenkins for Gitee
腾讯云托管
腾讯云 Serverless
悬镜安全
阿里云 SAE
Codeblitz
SBOM
我知道了,不再自动展开
23
解决了RedisServiceImpl可能的NullPointerException问题
已关闭
ZKMALL:master
ZKMALL:v2.x
姚猛
创建于 2024-06-05 18:20
克隆/下载
HTTPS
SSH
复制
下载 Email Patch
下载 Diff 文件
Pull Request 描述 优化概述 本次提交优化了`RedisServiceImpl`的代码,主要解决了可能的`NullPointerException`问题,并提取了重复代码。通过这些改动,提高了代码的健壮性、可维护性和安全性。 改动清单 1. **空值检查**: - 在`DataType dataType = redisTemplate.type(keyString)`后增加空值检查。 - 在`Object value = redisTemplate.opsForValue().get(keyString)`后增加空值检查。 2. **提取重复代码**: - 提取了`isFilteredKey`方法用于检查键是否需要过滤,减少代码冗余。 3. **增强输入验证**: - 在`delete`方法中增加对`key`的空值和空字符串检查。 - 在`getCodeVal`方法中增加对`key`的空值和空字符串检查。 - 在`saveCode`方法中增加对`key`和`val`的空值和空字符串检查。 #代码更正示例 ```java package co.yixiang.modules.monitor.service.impl; import co.yixiang.modules.monitor.domain.vo.RedisVo; import co.yixiang.modules.monitor.service.RedisService; import co.yixiang.utils.PageUtil; import co.yixiang.utils.ShopKeyUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; import org.springframework.data.redis.connection.DataType; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; @Service public class RedisServiceImpl implements RedisService { @Autowired private RedisTemplate<String, Object> redisTemplate; @Value("${loginCode.expiration}") private Long expiration; @Override public Page<RedisVo> findByKey(String key, Pageable pageable) { List<RedisVo> redisVos = new ArrayList<>(); if (!"*".equals(key)) { key = "*" + key + "*"; } for (Object s : redisTemplate.keys(key)) { String keyString = s.toString(); // 过滤掉权限的缓存 if (isFilteredKey(keyString)) { continue; } DataType dataType = redisTemplate.type(keyString); if (dataType == null || !"string".equals(dataType.code())) { continue; } Object value = redisTemplate.opsForValue().get(keyString); if (value == null) { continue; } RedisVo redisVo = new RedisVo(keyString, value.toString()); redisVos.add(redisVo); } Page<RedisVo> page = new PageImpl<>( PageUtil.toPage(pageable.getPageNumber(), pageable.getPageSize(), redisVos), pageable, redisVos.size()); return page; } @Override public void delete(String key) { if (key != null && !key.trim().isEmpty()) { redisTemplate.delete(key); } } @Override public void flushdb() { redisTemplate.getConnectionFactory().getConnection().flushDb(); } @Override public String getCodeVal(String key) { if (key == null || key.trim().isEmpty()) { return ""; } try { Object value = redisTemplate.opsForValue().get(key); return value != null ? value.toString() : ""; } catch (Exception e) { return ""; } } @Override public void saveCode(String key, Object val) { if (key != null && !key.trim().isEmpty() && val != null) { redisTemplate.opsForValue().set(key, val); redisTemplate.expire(key, expiration, TimeUnit.MINUTES); } } private boolean isFilteredKey(String key) { return key.contains("role::loadPermissionByUser") || key.contains("user::loadUserByUsername") || key.contains("wechat") || key.contains("wxpay") || key.contains(ShopKeyUtils.getSiteUrl()); } } ``` 测试情况 - 所有现有测试用例通过。 - 新增了针对空值检查的测试用例,确保没有`NullPointerException`抛出。 - 代码通过了项目的格式化检查。 请审核我的Pull Request,如果有任何问题或建议,我会及时做出修正。
此 Pull Request 需要通过一些审核项
类型
指派人员
状态
审查
Neo
已完成
(0/0人)
怎样手动合并此 Pull Request
git checkout v2.x
git pull https://gitee.com/zkmall/b2b2c.git master
git push origin v2.x
评论
0
提交
63
文件
200+
检查
代码问题
0
批量操作
展开设置
折叠设置
审查
Code Owner
审查人员
ZKMALL
zkmall
Neo
zhileNeo
未设置
最少人数
0
测试
ZKMALL
zkmall
未设置
最少人数
0
优先级
不指定
严重
主要
次要
不重要
标签
标签管理
未设置
关联 Issue
未关联
Pull Request 合并后将关闭上述关联 Issue
里程碑
未关联里程碑
参与者
(1)
Cherry-pick 提交
Cherry-pick 可以将
特定提交(Commit)
从某个分支挑选并应用到另一个分支,实现快速集成特定更改,而无需合并整个分支。
请选择应用 Cherry-pick 提交 (Commit) 的目标分支
新建分支
当前账号不存在 Fork 仓库,建议 cherry-pick 到 Fork 仓库。
Fork 仓库
提交列表
Commit SHA
Commit Message
基于 Cherry-pick 后的分支发起 Pull Request
取消
Cherry-pick
Java
1
https://gitee.com/zkmall/b2b2c.git
git@gitee.com:zkmall/b2b2c.git
zkmall
b2b2c
ZKMALL-B2B2C多商户Java商城后台
点此查找更多帮助
搜索帮助
Git 命令在线学习
如何在 Gitee 导入 GitHub 仓库
Git 仓库基础操作
企业版和社区版功能对比
SSH 公钥设置
如何处理代码冲突
仓库体积过大,如何减小?
如何找回被删除的仓库数据
Gitee 产品配额说明
GitHub仓库快速导入Gitee及同步更新
什么是 Release(发行版)
将 PHP 项目自动发布到 packagist.org
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册