Python 官方文档:入门教程 => 点击学习
目录前端请求验证码后端生成验证码登录登录接口校验总结基本流程 细分一共有7步。 生成验证码:可以使用图形库生成一张随机验证码图片,然后将图片存储在服务器端。或者编码为base64方便
基本流程
细分一共有7步。
uuid是重点,将会贯穿整个验证码的生命周期。后端会根据uuid找到真实验证码进行比对。
getCode() {
getCodeImg().then(res => {
this.codeUrl = "data:image/gif;base64," + res.img;
this.loginFORM.uuid = res.uuid;
});
},
@GetMapping("/captchaimage")
public ajaxResult getCode(httpservletResponse response) throws ioException{
// 生成验证码信息
String uuid = IdUtils.simpleUUID();
String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
String capStr = null;
BufferedImage image = null;
// 生成验证码 可以配置多种类型的验证码
if ("math".equals(captchaType)){
capStr = captchaProducerMath.createText();
image = captchaProducerMath.createImage(capText);
}
else if ("char".equals(captchaType)){
capStr = captchaProducer.createText();
image = captchaProducer.createImage(capStr);
}
// 存入Redis
redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
// 转换流信息写出
FastByteArrayOutputStream os = new FastByteArrayOutputStream();
try{
ImageIO.write(image, "jpg", os);
}
catch (IOException e){
return AjaxResult.error(e.getMessage());
}
AjaxResult ajax = AjaxResult.success();
ajax.put("uuid", uuid);
// 转码base64
ajax.put("img", Base64.encode(os.toByteArray()));
return ajax;
}
带上 验证码 和 uuid 一起登录
passWord: "admin123"
username: "admin"
uuid: "66ae1f227bf245a8b6ec2e6c00fb6189"
code: "1234"
先校验验证码,再校验账号密码。
@PostMapping("/login")
public AjaxResult login(@RequestBody LoginBody loginBody) {
AjaxResult ajax = AjaxResult.success();
String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
loginBody.getUuid());
ajax.put(Constants.TOKEN, token);
return ajax;
}
public String login(String username, String password, String code, String uuid)
{
String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
// 根据UUID 去redis取出正确的验证码======================================================
String captcha = redisCache.getCacheObject(verifyKey);
redisCache.deleteObject(verifyKey);
// 验证redis的验证码和用户输入的验证码是否相等。
// 验证账号密码
// 验证错误就抛出异常
// 生成token
return tokenService.createToken(loginUser);
}
这是一个简单的登录验证码实现流程,具体实现可能因技术栈和需求而有所不同。但是流程基本上都是相同的。
到此这篇关于三分钟带你掌握Java开发图片验证码功能方法的文章就介绍到这了,更多相关Java图片验证码内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: 三分钟带你掌握Java开发图片验证码功能方法
本文链接: https://lsjlt.com/news/195738.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0