前言
光阴似箭,日月如梭。转眼已经过去了一个月,孤尽训练营第四周也已经结束,今天我们一起来对这一周的内容做个简单回顾。
第一次课 单元测试和系统安全规约
什么是单元测试?
对软件组成单元进行的测试,其目的是检验软件基本组成单位的正确性。测试对象是软件设计的最小单元:模块,又称模块测试
为什么要单元测试?
- 提高软件质量
- 促进代码优化
- 提升研发效率
怎么单元测试?
借助常用的单元测试框架,如 Junit、SpringTest等
系统安全规约
为什么需要注意系统安全?
一张照片就有可能暴露你的信息,客户的信息应该保密,系统权限应该严格控制
怎么做?
- 校验权限,防止越权行为,包含数据权限和操作权限
- 敏感信息数据脱敏,
- 防止SQL注入
第二次课 用户系统实现
什么是JWT?
Json web toke(JWT)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准(RFC7519)定义了一种简洁的,自包含的方法用于通信双方之间以JSON对象的形式安全传递信息。因为数字签名的存在,这些信息是可信的,JWT可以使用HMAC算法或者是RSA的公私秘钥对进行签名
为什么使用JWT?
传统token认证,用户每次请求资源服务,资源服务都需要携带令牌访问认证服务去校验令牌的合法性,并根据令牌获取用户的相关信息,性能低下,利用公钥私钥完成对令牌的加密,解决了性能问题。如果加密解密成功,则表示令牌合法,如果加密解密失败,则令牌无效,不合法。
怎么做?
- 私钥颁发令牌
- 公钥验证令牌
第三次课 Redis分布式锁
是什么?
借助 setnx 和 expire 两个redis命令完成
为什么?
传统的并发加锁无法处理多实例的场景
怎么做?
利用Jedis 实现分布式锁,
Jedis就是集成了redis的一些命令操作,封装了redis的java客户端。提供了连接池管理。'
加锁
jedis.set = set key value [Ex seconds][Px milliseconds] [NX|XX]
解锁
jedis.del(key)
redisson分布式锁
是基于netty的redis 客户端。不但能操作原生的Redis 数据结构,还能为使用者提供了一系列具有分布式特性的常用工具类,实现了分布式锁。
RLock disLock = client.getLock("DISLOCK");
disLock.lock(); // 默认 30s
=======================
disLock.tryLock(2000, 150000, TimeUnit.MILLISECONDS);
不登高山,不知天之高也,不临深溪,不知地之厚也。 --荀子