中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

springbooot使用google驗證碼的功能怎么實現

發布時間:2023-05-04 16:50:02 來源:億速云 閱讀:186 作者:iii 欄目:開發技術

本篇內容主要講解“springbooot使用google驗證碼的功能怎么實現”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“springbooot使用google驗證碼的功能怎么實現”吧!

springbooot使用google驗證碼

1、使用場景

由于需要做一個前后端分離的項目,想著使用google驗證碼,由于年齡大了,這些知識啊,用完就忘,在這里記錄一下。

登錄時驗證碼設計

  • 使用google驗證碼工具,當前端在登錄請求時,在后端生成驗證碼,同時也生成一個隨機數(UUID)與該驗證碼對應。

  • 使用redis作為緩存,將該隨機數和驗證碼存儲在redis中。

  • 隨機數的目的是將驗證碼與發起登錄請求的用戶聯系起來。

  • 當用戶提交登錄表單時,后端根據該隨機數從redis中讀取驗證碼與用戶輸入的驗證碼進行驗證。

大概就是這樣的一個設計思路,具體如下:

springbooot使用google驗證碼的功能怎么實現

2、springboot使用google驗證碼

1、引入依賴

首先在pom文件中引入該驗證碼插件kaptcha

 <!-- google 驗證碼 -->
        <!-- https://mvnrepository.com/artifact/com.github.penggle/kaptcha -->
        <dependency>
            <groupId>com.github.penggle</groupId>
            <artifactId>kaptcha</artifactId>
            <version>2.3.2</version>
        </dependency>
2、編寫配置類

引入依賴之后還需要編寫配置類,在配置類里設置自己想要的驗證碼樣式,包括顏色、大小、寬高等等。

我的配置類如下:

import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Properties;
@Configuration
public class KaptchaConfig {
       @Bean
    DefaultKaptcha producer() { //驗證碼的配置類
        Properties properties = new Properties();                       
        properties.put("kaptcha.border", "no");                       //邊框
        properties.put("kaptcha.textproducer.font.color", "black");   //字體顏色
        properties.put("kaptcha.textproducer.char.space", "5");       //字體間隔
        properties.put("kaptcha.image.height", "40");                 //圖片高度
        properties.put("kaptcha.image.width", "100");                 //圖片寬度
        properties.put("kaptcha.textproducer.font.size", "30");       //字體大小
        Config config = new Config(properties);                       
        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();         
        defaultKaptcha.setConfig(config);
        return defaultKaptcha;
    }
}
3、編寫控制層

將下面的代碼放到需要使用驗證碼的controller中

//獲取登錄驗證碼
    @GetMapping("/captcha")
    public Result Captcha() throws IOException {
        String key = UUID.randomUUID().toString();
        String code = producer.createText();
        BufferedImage image = producer.createImage(code);
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        ImageIO.write(image, "jpg", outputStream);
        BASE64Encoder encoder = new BASE64Encoder();
        String str = "data:image/jpeg;base64,";
        String base64Img = str + encoder.encode(outputStream.toByteArray());
        redisUtils.hset(Constants.CAPTCHA_KEY, key, code, 120);
        return Result.succ(
                MapUtil.builder()
                        .put("userKey", key)
                        .put("captchaImg", base64Img)
                        .build()
        );
    }

上面用到了封裝的redis工具類redisUtils中的hset方法,并設置了驗證碼過期時間120秒。
hset方法如下:

/**
     * 向一張hash表中放入數據,如果不存在將創建
     *
     * @param key   鍵
     * @param item  項
     * @param value 值
     * @param time  時間(秒) 注意:如果已存在的hash表有時間,這里將會替換原有的時間
     * @return true 成功 false失敗
     */
    public boolean hset(String key, String item, Object value, long time) {
        try {
            redisTemplate.opsForHash().put(key, item, value);
            if (time > 0) {
                expire(key, time);
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

Result是編寫的統一結果返回類,代碼如下所示:

@Data
public class Result_ implements Serializable {
    private int code;
    private String msg;
    private Object data;
    public static Result_ succ(Object data) {
        return succ(200, "操作成功", data);
    }
    public static Result_ fail(String msg) {
        return fail(400, msg, null);
    }
    public static Result_ succ (int code, String msg, Object data) {
        Result_ result = new Result_();
        result.setCode(code);
        result.setMsg(msg);
        result.setData(data);
        return result;
    }
    public static Result_ fail (int code, String msg, Object data) {
        Result_ result = new Result_();
        result.setCode(code);
        result.setMsg(msg);
        result.setData(data);
        return result;
    }
}

這里沒有編寫對于驗證碼的驗證。

4、前端實現

驗證碼輸入框代碼如下:

<el-form-item label="驗證碼" prop="code" >
                          <el-input placeholder="請輸入驗證碼"v-model="loginForm.code" ></el-input>
                          <el-image class="captchaImg" :src="captchaImg" @click="getCaptcha()"></el-image>
                      </el-form-item>

驗證碼函數如下:

// 獲取驗證碼
        getCaptcha() {
            this.$axios.get('/user/captcha1').then(res => {
                this.loginForm.token = res.data.data.token
                this.captchaImg = res.data.data.captchaImg
                this.loginForm.code = ''
            })
        }

到此,相信大家對“springbooot使用google驗證碼的功能怎么實現”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

淮北市| 武川县| 甘孜| 海盐县| 兴海县| 五寨县| 巨野县| 襄城县| 五华县| 兴山县| 南靖县| 安庆市| 忻州市| 边坝县| 晋宁县| 徐闻县| 南靖县| 伊吾县| 临清市| 东丽区| 团风县| 固原市| 闵行区| 临泽县| 榆树市| 蒙自县| 临猗县| 稷山县| 泰安市| 普兰县| 南投县| 洛川县| 天峨县| 伊川县| 沁水县| 宝清县| 乌拉特后旗| 固始县| 澎湖县| 翁源县| 故城县|