虽然说本人不太喜欢在项目中加入各种各样的验证,但在实际项目里,这确实是很重要的部分,不仅能阻挡一部分的人机注册,也能筛选用户 (bushi)
本文简单的探索一下 SpringBoot 如何简单的实现图片验证码功能
简单验证码
前置
其实不用 Redis,使用 Session也能实现,但是现在一般都需要中间件
组件的基本使用
首先还是先在 maven 里引入
<dependencies> <dependency> <groupId>com.pig4cloud.plugin</groupId> <artifactId>captcha-spring-boot-starter</artifactId> <version>2.2.5</version> </dependency> </dependencies>
|
后端代码
简单的实现接口
@RequestMapping("/checkCode") public ResponseVO checkcode() { ArithmeticCaptcha captcha = new ArithmeticCaptcha(100, 42); String code = captcha.text(); String checkCodeKey = redisComponent.saveCheckCode(code); String checkCodeBase64 = captcha.toBase64(); Map<String, String> result = new HashMap<>(); result.put("checkCode", checkCodeBase64); result.put("checkCodeKey", checkCodeKey); return getSuccessResponseVO(result); }
|
Redis 方法
Redis 需要一些方法,为验证码设置缓存时间,验证结果等。
这里是简易示例,因为我 RedisUtils 里包装了一些额外的工具参数,篇幅很长,不方便展示。
```java @Component public class RedisComponent {
@Autowired private StringRedisTemplate stringRedisTemplate;
public String saveCheckCode(String code) { String key = "checkCode:" + UUID.randomUUID().toString().replace("-", ""); stringRedisTemplate.opsForValue().set(key, code, 5, TimeUnit.MINUTES); return key; }
public String getCheckCode(String key) { return stringRedisTemplate.opsForValue().get(key); }
public void deleteCheckCode(String key) { stringRedisTemplate.delete(key); }
public boolean validateCheckCode(String key, String code) { String storedCode = getCheckCode(key); if (storedCode == null) { return false; } boolean isValid = storedCode.equals(code); if (isValid) { deleteCheckCode(key); } return isValid; } }
|
然后我们在注册、登录等场景,便可以使用这些方法,进行获取和校验。