视频链接:https://www.bilibili.com/video/BV1qV4y1d7zY/?p=8&vd_source=3ed8d87d44643aa94716ad29525000fe
博文参考:实现图形验证码以及邮箱验证码
- 图形验证码生成主要涉及的代码:AccountController、CreateImageCode,实现的逻辑框图如下:
总结及备注:
(1) @RestController*(“accountController”)* 用于声明一个控制器类,这个类中的方法默认返回的数据会直接写入到HTTP响应体中,而不是解析为视图名称,将bean注册到Spring上下文中并命名accountController。这种方式一般在需要明确指定bean名称时使用,但在大多数情况下,这不是必须的,因为Spring会默认将类名的首字母小写作为bean的名称,也就是斜体部分(“accountController”)可以删除;
(2)HTTP响应头设置时禁用了浏览器缓存,以下这三个响应头都是禁止浏览器进行缓存,避免验证码图片被缓存,其中Expires响应头为0意思是该验证码立即过期,不会被缓存;
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
(3)问题:怎么保证登录、注册界面的验证码图片一直存在?
这里前端每次在登录、注册以及忘记密码的界面刷新和打开时都会发送checkcode请求,所以你会看到一直都有验证码图片,(前端我不太懂,但是调试的时候,浏览器可以看到一直有这个请求)
2. 发送邮箱验证码:涉及的java文件主要有:AccountController、EmailCodeServiceImpl、EmailCodeService、EmailCodeService对应的mapper文件等,对应的实现逻辑框图如下:
实现的逻辑是:判断验证码是否相等(忽略大小写),如果相等就会向邮箱发送验证码,这里用了GlobalInterceptor注解,这个注解的作用是检查“登录、参数、是否为管理员账号”是否有效。向邮箱发送验证码又会考虑两种情况:1、如果类型type == 0,即数据库里已经有,不需要再注册,直接抛出异常;2、如果数据库不存在,即需要发送验证码进行注册,会通过sendEmailCode(String toEmail, String code)进行验证码的发送,发送完毕后,将emailCode插入数据库中
总结及备注:
这里用了重载:(1)private void sendEmailCode(String toEmail, String code)、(2)public void sendEmailCode(String toEmail, Integer type),
(1)的作用是使用邮箱发送验证码,(2)的作用是判断type(是否已经注册过了)后调用(1)发送,然后将邮箱、验证码(这里不太理解把验证码保存到数据库的原因,这个参数感觉只用一次就行了)、创建时间、状态(0表示已注册,状态置0),由于这里是让(2)调用(1),(1)全程也只在(2)里出现了一次,其实可以把(1)直接合并到(2)中,两个重名方法容易误解。
明日计划:
1、完成注册、登录