最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springbooot使用google驗(yàn)證碼的功能實(shí)現(xiàn)

 更新時(shí)間:2023年05月04日 08:49:37   作者:張場長  
這篇文章主要介紹了springbooot使用google驗(yàn)證碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

springbooot使用google驗(yàn)證碼

1、使用場景

由于需要做一個(gè)前后端分離的項(xiàng)目,想著使用google驗(yàn)證碼,由于年齡大了,這些知識(shí)啊,用完就忘,在這里記錄一下。

登錄時(shí)驗(yàn)證碼設(shè)計(jì)

  • 使用google驗(yàn)證碼工具,當(dāng)前端在登錄請求時(shí),在后端生成驗(yàn)證碼,同時(shí)也生成一個(gè)隨機(jī)數(shù)(UUID)與該驗(yàn)證碼對應(yīng)。
  • 使用redis作為緩存,將該隨機(jī)數(shù)和驗(yàn)證碼存儲(chǔ)在redis中。
  • 隨機(jī)數(shù)的目的是將驗(yàn)證碼與發(fā)起登錄請求的用戶聯(lián)系起來。
  • 當(dāng)用戶提交登錄表單時(shí),后端根據(jù)該隨機(jī)數(shù)從redis中讀取驗(yàn)證碼與用戶輸入的驗(yàn)證碼進(jìn)行驗(yàn)證。

大概就是這樣的一個(gè)設(shè)計(jì)思路,具體如下:

在這里插入圖片描述

2、springboot使用google驗(yàn)證碼

1、引入依賴

首先在pom文件中引入該驗(yàn)證碼插件kaptcha

 <!-- google 驗(yàn)證碼 -->
        <!-- https://mvnrepository.com/artifact/com.github.penggle/kaptcha -->
        <dependency>
            <groupId>com.github.penggle</groupId>
            <artifactId>kaptcha</artifactId>
            <version>2.3.2</version>
        </dependency>

2、編寫配置類

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

我的配置類如下:

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() { //驗(yàn)證碼的配置類
        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、編寫控制層

將下面的代碼放到需要使用驗(yàn)證碼的controller中

//獲取登錄驗(yàn)證碼
    @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方法,并設(shè)置了驗(yàn)證碼過期時(shí)間120秒。
hset方法如下:

/**
     * 向一張hash表中放入數(shù)據(jù),如果不存在將創(chuàng)建
     *
     * @param key   鍵
     * @param item  項(xiàng)
     * @param value 值
     * @param time  時(shí)間(秒) 注意:如果已存在的hash表有時(shí)間,這里將會(huì)替換原有的時(shí)間
     * @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是編寫的統(tǒng)一結(jié)果返回類,代碼如下所示:

@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;
    }
}

這里沒有編寫對于驗(yàn)證碼的驗(yàn)證。

4、前端實(shí)現(xiàn)

驗(yàn)證碼輸入框代碼如下:

<el-form-item label="驗(yàn)證碼" prop="code" style="width: 380px">
                          <el-input placeholder="請輸入驗(yàn)證碼"v-model="loginForm.code"style="width: 172px; float: left" ></el-input>
                          <el-image class="captchaImg" :src="captchaImg" @click="getCaptcha()"></el-image>
                      </el-form-item>

驗(yàn)證碼函數(shù)如下:

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

到此這篇關(guān)于springbooot使用google驗(yàn)證碼的文章就介紹到這了,更多相關(guān)springbooot google驗(yàn)證碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java對稱加密算法DES實(shí)例詳解

    Java對稱加密算法DES實(shí)例詳解

    這篇文章主要介紹了Java對稱加密算法DES,結(jié)合實(shí)例形式詳細(xì)分析了java DES算法的概念、原理、實(shí)現(xiàn)方法與應(yīng)用場景,需要的朋友可以參考下
    2019-09-09
  • 詳解spring mvc中url-pattern的寫法

    詳解spring mvc中url-pattern的寫法

    這篇文章主要介紹了spring mvc中url-pattern的寫法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • Mybatis框架之模板方法模式(Template Method Pattern)的實(shí)現(xiàn)

    Mybatis框架之模板方法模式(Template Method Pattern)的實(shí)現(xiàn)

    MyBatis中使用了模板方法模式來控制SQL語句的執(zhí)行流程,本文主要介紹了Mybatis框架之模板方法模式(Template Method Pattern)的實(shí)現(xiàn),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • Flink部署集群整體架構(gòu)源碼分析

    Flink部署集群整體架構(gòu)源碼分析

    這篇文章主要為大家介紹了Flink部署集群及整體架構(gòu)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Java后端配置允許跨域方式

    Java后端配置允許跨域方式

    本文介紹了在不同技術(shù)和框架中配置跨域資源共享(CORS)的方法,包括使用SpringMVC的@CrossOrigin注解、SpringBoot的全局CORS配置、SpringSecurity中的CORS集成以及手動(dòng)設(shè)置響應(yīng)頭,根據(jù)具體需求和技術(shù)棧,選擇合適的方法來確??缬蛘埱蟮陌踩院陀行?/div> 2025-02-02
  • Spring IOC原理詳解

    Spring IOC原理詳解

    這篇文章主要介紹了Spring IOC原理詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • java線程池核心API源碼詳細(xì)分析

    java線程池核心API源碼詳細(xì)分析

    大家好,本篇文章主要講的是java線程池核心API源碼詳細(xì)分析,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • Spring?Cloud?Stream實(shí)現(xiàn)數(shù)據(jù)流處理

    Spring?Cloud?Stream實(shí)現(xiàn)數(shù)據(jù)流處理

    Spring?Cloud?Stream的核心是Stream,準(zhǔn)確來講Spring?Cloud?Stream提供了一整套數(shù)據(jù)流走向(流向)的API,?它的最終目的是使我們不關(guān)心數(shù)據(jù)的流入和寫出,而只關(guān)心對數(shù)據(jù)的業(yè)務(wù)處理,本文給大家介紹了Spring?Cloud?Stream實(shí)現(xiàn)數(shù)據(jù)流處理,需要的朋友可以參考下
    2024-11-11
  • SpringBoot實(shí)現(xiàn)Word轉(zhuǎn)PDF和TXT的實(shí)踐分享

    SpringBoot實(shí)現(xiàn)Word轉(zhuǎn)PDF和TXT的實(shí)踐分享

    研發(fā)工作中難免會(huì)遇到一些奇奇怪怪的需求,就比如最近,客戶提了個(gè)新需求:上傳一個(gè)WORD文檔,要求通過系統(tǒng)把該文檔轉(zhuǎn)換成PDF和TXT,所以本文給大家分享了SpringBoot實(shí)現(xiàn)Word轉(zhuǎn)PDF和TXT的實(shí)踐,感興趣的朋友可以參考下
    2024-08-08
  • Servlet實(shí)現(xiàn)分頁效果

    Servlet實(shí)現(xiàn)分頁效果

    這篇文章主要為大家詳細(xì)介紹了Servlet實(shí)現(xiàn)分頁效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03

最新評論

道真| 香格里拉县| 平泉县| 酒泉市| 德兴市| 松原市| 桃园市| 吉安市| 垫江县| 固阳县| 鄂尔多斯市| 馆陶县| 阜阳市| 长寿区| 江安县| 银川市| 乌什县| 龙南县| 德州市| 平舆县| 砀山县| 喀喇沁旗| 万全县| 吉隆县| 两当县| 静宁县| 开原市| 鸡泽县| 高唐县| 固安县| 青铜峡市| 阳西县| 苍山县| 阜平县| 樟树市| 仪陇县| 察雅县| 永福县| 太谷县| 遵义市| 南宫市|