01-图片验证码业务实现

2023-09-18 21:40:43 星期一


1、导入关于图片验证码的生成工具

2、参考接口文档

image

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());
    }
}
posted @ 2023-09-19 08:29  CYF0913  阅读(60)  评论(0)    收藏  举报