2023-09-18 21:40:43 星期一
1、导入关于图片验证码的生成工具
2、参考接口文档

3、业务逻辑实现:
1. 由java代码生成二维码验证图片
2. 通过设置请求头禁止缓存,强制浏览器不缓存
3. 告诉浏览器内容响应为图片格式
4. 获取生成验证码的文案
5. 通过判断tpye的指确定是普通还是邮箱发送随后进行处理生成不同cookie键,保存验证码
6. 然后通过response.getOutputStream()输出流响应图像
/**
* @RestController 是一个用于定义在Spring框架中创建RESTful Web服务的注解。
* 它通常用于控制器(Controller)类上,
* 并指示该类的方法将处理HTTP请求并返回RESTful风格的响应数据,
* 而不是传统的HTML视图。
*/
@RestController
public class AccountController extends ABaseController {
//依赖注入
@Resource
private EmailCodeService emailCodeService;
@Resource
private UserInfoService userInfoService;
/**
* 验证码
*/
@RequestMapping("/checkCode")
public void checkCode(HttpServletResponse response, HttpSession session,Integer type) throws IOException {
//由java代码生成验证码图片
CreateImageCode vCode = new CreateImageCode(130,38,5,10);
/**
* 以下代码详细解释: 禁止浏览器缓存
* response.setHeader()方法HPPT相应头的方法
* 参数1:Pragma
* Pragma 是一个HTTP标头,用于控制缓存行为。
* 参数2:no-cache
* 设置为 "no-cache" 表示不应该使用缓存来存储响应,
* 而是在每次请求时都从服务器获取新的数据。
* 主要作用:
* 这对于需要实时或频繁更新的内容非常有用,
* 如网页上的动态内容或敏感信息。
*/
response.setHeader("Pragma","no-cache");
/**
* 也是一种禁止缓存的操作
* 在设置 Cache-Control 为 "no-cache" 时,
* 客户端将始终向服务器请求资源的最新版本,
* 而不会使用本地缓存的副本。
* 这有助于确保用户看到的是最新的数据,
* 特别是在需要动态内容或经常更改的Web应用程序中。
*
* 通常俩个一起来连用:
* #response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
* #response.setHeader("Pragma", "no-cache");
*/
response.setHeader("Cache-Control", "no-cache");
/**
* 参数1:HTTP的相应头的字段·Expires·
* 参数2:告诉浏览器,相应已经过期不需要进行缓存和使用
*
* 这个设置特别适用于那些需要实时数据或经常更新的网页,
* 以确保用户总是看到最新的内容。通常,Expires 头与 Cache-Control 头一起使用,
* 以提供更灵活和精确的缓存控制策略,但将 Expires 设置为 0 是一种强制浏览器不要缓存响应的简单方式。
*
* #response.setHeader("Cache-Control", "")
* #response.setDateHeader("Expires",0);
*/
response.setDateHeader("Expires",0);
//这个设置告诉浏览器或客户端,响应的内容类型是JPEG图像。
response.setContentType("image/jpeg");
//获取生成的验证码 文案 如:45sdfa
String code = vCode.getCode();
/**
* 通过比较 if 判断传输过来的 type的值来判断 是注册时的验证码还是发送邮箱时的验证码
* 然后通过判断进行返回不同的 验证码的值
* 通过session.setAttribute(键,值);保存不同验证码值
*/
if (type == null || type==0){
session.setAttribute(Constants.CHECK_CODE_KEY, code);
}else{
session.setAttribute(Constants.CHECK_CODE_KEY_EMAIL,code);
}
/**
* response.getOutputStream() 是用于获取HTTP响应的输出流的方法。
* 在Java Web开发中,它通常用于将数据写入HTTP响应,
* 以便将数据发送给客户端浏览器或其他HTTP客户端。
* 输出图像
*/
vCode.write(response.getOutputStream());
}
}