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

SpringBoot結(jié)合kaptcha生成圖片驗證碼詳解

 更新時間:2026年01月16日 10:19:54   作者:fate急速出擊  
這篇文章主要為大家詳細(xì)介紹了SpringBoot如何結(jié)合kaptcha實現(xiàn)圖片驗證碼功能,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考一下

kaptcha 是一個擴(kuò)展自 simplecaptcha 的驗證碼庫,默認(rèn)情況下,Kaptcha非常易于設(shè)置和使用,并且默認(rèn)輸出會產(chǎn)生一個很難驗證的驗證碼。默認(rèn)情況下,它生成的驗證碼看起來與上面的非常相似。如果您想更改輸出的外觀,則有幾個配置選項,并且該框架是模塊化的,因此您可以編寫自己的變形代碼

1.添加依賴

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>kaptcha-spring-boot-starter</artifactId>
    <version>1.0.0</version>
</dependency>

2.代碼示例

配置類

import com.google.code.kaptcha.Constants;
import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.Properties;

/**
 * @auther:Wangxl
 * @Emile:18335844494@163.com
 * @Time:2021/8/2 10:47
 */
@Configuration
public class CaptchaConfig {
    /**
     * 驗證碼配置
     * Kaptcha配置類名
     *
     * @return
     */
    @Bean
    @Qualifier("captchaProducer")
    public DefaultKaptcha kaptcha() {
        DefaultKaptcha kaptcha = new DefaultKaptcha();
        Properties properties = new Properties();
        //驗證碼個數(shù)
        properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "4");
        //字體間隔
        properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_SPACE,"8");
        //干擾線顏色
        properties.setProperty(Constants.KAPTCHA_NOISE_COLOR,"red");
        //干擾實現(xiàn)類
        properties.setProperty(Constants.KAPTCHA_NOISE_IMPL, "com.google.code.kaptcha.impl.DefaultNoise");
//        properties.setProperty(Constants.KAPTCHA_NOISE_IMPL, "com.google.code.kaptcha.impl.NoNoise");
        //圖片樣式
        properties.setProperty(Constants.KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.WaterRipple");
        //文字來源
        properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_STRING, "0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPLKJHGFDSAZXCVBNM");
        Config config = new Config(properties);
        kaptcha.setConfig(config);
        return kaptcha;
    }
}

service

package wxl.top.service;

import wxl.top.util.JsonData;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @auther:Wangxl
 * @Emile:18335844494@163.com
 * @Time:2021/8/2 11:44
 */
public interface CaptchaService {

    void getCaptcha(HttpServletRequest request, HttpServletResponse response);

}

impl

@Service
public class CaptchaServiceImpl implements CaptchaService {

    @Autowired
    private StringRedisTemplate redisTemplate;

    @Autowired
    private Producer captchaProducer;

    @Override
    public void getCaptcha(HttpServletRequest request, HttpServletResponse response) {
        String captchaText = captchaProducer.createText();

        String key = getCaptchaKey(request);

        //五分鐘過期
        redisTemplate.opsForValue().set(key,captchaText,5, TimeUnit.MINUTES);

        BufferedImage bufferedImage = captchaProducer.createImage(captchaText);

        ServletOutputStream outputStream = null;
        try {
            outputStream = response.getOutputStream();
            ImageIO.write(bufferedImage,"jpg",outputStream);
            outputStream.flush();
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
private String getCaptchaKey(HttpServletRequest httpServletRequest){
   String ipAddr = CommonUtil.getIpAddr(httpServletRequest);
   String userAgent = httpServletRequest.getHeader("User-Agent");
   String key = "user-service:captcha:"+CommonUtil.MD5(ipAddr+userAgent);
   return key;
}

controller

@RestController
@RequestMapping("captcha")
public class CaptchaController {

    @Autowired
    private CaptchaService captchaService;

    @GetMapping(value = "get_captcha")
    public void getCaptcha(HttpServletRequest request, HttpServletResponse response){
        captchaService.getCaptcha(request,response);
    }
}

3.演示

到此這篇關(guān)于SpringBoot結(jié)合kaptcha生成圖片驗證碼詳解的文章就介紹到這了,更多相關(guān)SpringBoot kaptcha圖片驗證碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Springboot整合Spring Cloud Kubernetes讀取ConfigMap支持自動刷新配置的教程

    Springboot整合Spring Cloud Kubernetes讀取ConfigMap支持自動刷新配置的教程

    這篇文章主要介紹了Springboot整合Spring Cloud Kubernetes讀取ConfigMap支持自動刷新配置,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • 程序員最喜歡的ThreadLocal使用姿勢

    程序員最喜歡的ThreadLocal使用姿勢

    ThreadLocal并不是一個Thread,而是Thread的局部變量,也許把它命名為ThreadLocalVariable更容易讓人理解一些,下面這篇文章主要給大家介紹了程序員最喜歡的ThreadLocal使用姿勢,需要的朋友可以參考下
    2022-02-02
  • java前后端傳值,參數(shù)有集合類型的數(shù)據(jù)時的兩種操作方式

    java前后端傳值,參數(shù)有集合類型的數(shù)據(jù)時的兩種操作方式

    這篇文章主要介紹了java前后端傳值,參數(shù)有集合類型的數(shù)據(jù)時的兩種操作方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Java數(shù)組轉(zhuǎn)換為逗號分隔字符串的三種方法

    Java數(shù)組轉(zhuǎn)換為逗號分隔字符串的三種方法

    這篇文章主要介紹了Java中三種將數(shù)組轉(zhuǎn)為逗號分隔字符串的方法:方法1通用但含括號,方法2專用于字符串?dāng)?shù)組高效,方法3靈活但性能較差,建議根據(jù)數(shù)組類型選擇String.join()或Arrays.toString(),需要的朋友可以參考下
    2025-09-09
  • 每日六道java新手入門面試題,通往自由的道路

    每日六道java新手入門面試題,通往自由的道路

    這篇文章主要為大家分享了最有價值的6道java面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,對hashCode方法的設(shè)計、垃圾收集的堆和代進(jìn)行剖析,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Netty粘包問題的常見解決方案

    Netty粘包問題的常見解決方案

    粘包和拆包問題也叫做粘包和半包問題,它是指在數(shù)據(jù)傳輸時,接收方未能正常讀取到一條完整數(shù)據(jù)的情況(只讀取了部分?jǐn)?shù)據(jù),或多讀取到了另一條數(shù)據(jù)的情況)就叫做粘包或拆包問題,本文介紹了Netty如何解決粘包問題,需要的朋友可以參考下
    2024-06-06
  • Springboot使用jsp具體案例解析

    Springboot使用jsp具體案例解析

    這篇文章主要介紹了Springboot使用jsp具體案例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • 使用easy connect之后,maven無法使用,原來需要配置-Djava.net.preferIPv4Stack=true問題

    使用easy connect之后,maven無法使用,原來需要配置-Djava.net.preferIPv4S

    這篇文章主要介紹了使用easy connect之后,maven無法使用,原來需要配置-Djava.net.preferIPv4Stack=true問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • Java設(shè)計模式編程之工廠方法模式的使用

    Java設(shè)計模式編程之工廠方法模式的使用

    這篇文章主要介紹了Java設(shè)計模式編程之工廠方法模式的使用,工廠方法模式屬于設(shè)計模式中三種工廠模式中的一種,需要的朋友可以參考下
    2016-02-02
  • java實現(xiàn)自定義表格渲染和編輯

    java實現(xiàn)自定義表格渲染和編輯

    這篇文章主要為大家詳細(xì)介紹了java如何實現(xiàn)自定義表格渲染和編輯,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04

最新評論

辽宁省| 台东县| 安庆市| 怀化市| 崇礼县| 衡东县| 东平县| 安义县| 常山县| 泰兴市| 赣榆县| 镇远县| 穆棱市| 西乡县| 聊城市| 双辽市| 神木县| 常州市| 肥东县| 大化| 浠水县| 太白县| 抚顺县| 章丘市| 尉犁县| 麻江县| 南充市| 晋城| 内乡县| 电白县| 长白| 长岛县| 罗江县| 桃园县| 交口县| 惠东县| 景洪市| 碌曲县| 太原市| 通辽市| 洛川县|