亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Springboot通過谷歌Kaptcha?組件生成圖形驗證碼功能

 更新時間:2023年05月16日 08:37:13   作者:算死草  
Kaptcha是谷歌開源的一款簡單實(shí)用的圖形驗證碼組件。我個人推薦它的最大原因是容易上手,采用約定大于配置的方式,快速契合到項目中,這篇文章主要介紹了Springboot通過谷歌Kaptcha組件生成圖形驗證碼的方法,需要的朋友可以參考下

圖形驗證碼屬于老生常談了,具體細(xì)節(jié)這里就不說了。生成圖形驗證碼的辦法非常多,今天講解一種通過Kaptcha組件快速生成圖形驗證碼的方法。
Kaptcha是谷歌開源的一款簡單實(shí)用的圖形驗證碼組件。我個人推薦它的最大原因是容易上手,采用約定大于配置的方式,快速契合到項目中。
話不多說,我們看看該如何使用它:
一、首先我們在springboot中引入以下maven組件:

 <dependency>
     <groupId>com.google.code.kaptcha</groupId>
     <artifactId>kaptcha</artifactId>
     <version>2.3</version>
 </dependency>

如果上述組件你一直無法拉取下來的話,也可以用如下配置:

  <dependency>
      <groupId>com.github.penggle</groupId>
      <artifactId>kaptcha</artifactId>
      <version>2.3.2</version>
  </dependency>

二、接著我們在springboot項目中加入對應(yīng)的config配置類,(防盜連接:本文首發(fā)自http://www.cnblogs.com/jilodream/ )這一步也可以配合配置中心來完成。它的作用是自動生成我們所需的config bean。

其中的配置項我們都可以選填,這里是只是一個參考,具體內(nèi)容可見下文表

@Component
public class KaptchaConfig {
    @Bean
    public DefaultKaptcha getDefaultKaptcha(){
        com.google.code.kaptcha.impl.DefaultKaptcha defaultKaptcha = new com.google.code.kaptcha.impl.DefaultKaptcha();
        Properties properties = new Properties();
        properties.put("kaptcha.border", "no");
        properties.put("kaptcha.textproducer.font.color", "red");
        properties.put("kaptcha.image.width", "213");
        properties.put("kaptcha.image.height", "88");
        properties.put("kaptcha.textproducer.font.size", "45");
        properties.put("kaptcha.session.key", "verifyCode");
        properties.put("kaptcha.textproducer.char.space", "6");
        properties.put("kaptcha.obscurificator.impl", "com.google.code.kaptcha.impl.WaterRipple");
       // properties.put("kaptcha.textproducer.font.names", "宋體,楷體,微軟雅黑");
        properties.put("kaptcha.background.clear.from", "yellow");
        properties.put("kaptcha.background.clear.to", "green");
        Config config = new Config(properties);
        defaultKaptcha.setConfig(config);
        return defaultKaptcha;
    }
}

配置表

配置名配置作用默認(rèn)值
kaptcha.border圖片邊框,合法值:yes , noyes
kaptcha.border.color邊框顏色,合法值: r,g,b (and optional alpha) 或者 white,black,blue.black
kaptcha.image.width圖片寬200
kaptcha.image.height圖片高50
kaptcha.producer.impl圖片實(shí)現(xiàn)類com.google.code.kaptcha.impl.DefaultKaptcha
kaptcha.textproducer.impl文本實(shí)現(xiàn)類com.google.code.kaptcha.text.impl.DefaultTextCreator
kaptcha.textproducer.char.string文本集合,驗證碼值從此集合中獲取abcde2345678gfynmnpwx
kaptcha.textproducer.char.length驗證碼長度5
kaptcha.textproducer.font.names字體Arial, Courier
kaptcha.textproducer.font.size字體大小40px.
kaptcha.textproducer.font.color字體顏色,合法值: r,g,b 或者 white,black,blue.black
kaptcha.textproducer.char.space文字間隔2
kaptcha.noise.impl干擾實(shí)現(xiàn)類com.google.code.kaptcha.impl.DefaultNoise
kaptcha.noise.color干擾 顏色,合法值: r,g,b 或者 white,black,blue.black
kaptcha.obscurificator.impl

圖片樣式:<br />水紋 com.google.code.kaptcha.impl.WaterRipple <br />

魚眼 com.google.code.kaptcha.impl.FishEyeGimpy <br />

陰影 com.google.code.kaptcha.impl.ShadowGimpy

com.google.code.kaptcha.impl.WaterRipple
kaptcha.background.impl背景實(shí)現(xiàn)類com.google.code.kaptcha.impl.DefaultBackground
kaptcha.background.clear.from背景顏色漸變,開始顏色light grey
kaptcha.background.clear.to背景顏色漸變, 結(jié)束顏色white
kaptcha.word.impl文字渲染器com.google.code.kaptcha.text.impl.DefaultWordRenderer
kaptcha.session.keysession keyKAPTCHA_SESSION_KEY
kaptcha.session.datesession dateKAPTCHA_SESSION_DATE

三、創(chuàng)建好config bean之后,我們就可以創(chuàng)建接口來生成驗證碼了controller類,新增接口:

@GetMapping("/login/getVerifyCode")
    public void getVerifyCode(String loginKey,
                              HttpServletRequest httpServletRequest,
                              HttpServletResponse httpServletResponse) {
        try {
            log.warn("query verify Code" + loginKey);
            loadService.getVerifyCode(loginKey, httpServletRequest, httpServletResponse);
        } catch (Exception e) {
            log.error("get verify Code failed :", e);
        }
    }

service類,新增邏輯:

public void getVerifyCode(String loginKey, HttpServletRequest httpServletRequest,
                              HttpServletResponse httpServletResponse) throws IOException {
        ByteArrayOutputStream imgOutputStream = new ByteArrayOutputStream();
        try {
            //生產(chǎn)驗證碼字符串并保存到session中
            String verifyCode = captchaProducer.createText();
            // httpServletRequest.getSession().setAttribute("verifyCode", verifyCode);  // 寫入會話
            //redisCache.setVerifyInfo(loginKey, verifyCode);   //寫入redis
            captchaMap.put(loginKey, verifyCode);//寫入內(nèi)存
            log.warn("reset verify code key {}, code {}", loginKey, verifyCode);
            BufferedImage challenge = captchaProducer.createImage(verifyCode);
            ImageIO.write(challenge, "jpg", imgOutputStream);
        } catch (IllegalArgumentException | IOException e) {
            httpServletResponse.sendError(HttpServletResponse.SC_NOT_FOUND);
            return;
        }
        byte[] captchaOutputStream = imgOutputStream.toByteArray();
        httpServletResponse.setHeader("Cache-Control", "no-store");
        httpServletResponse.setHeader("Pragma", "no-cache");
        httpServletResponse.setDateHeader("Expires", 0);
        httpServletResponse.setContentType("image/jpeg");
        try (ServletOutputStream responseOutputStream = httpServletResponse.getOutputStream()) {
            responseOutputStream.write(captchaOutputStream);
            responseOutputStream.flush();
        } catch (IOException ex) {
            log.error("find ex in create a new verify Code", ex);
        }
    }

相關(guān)代碼全部開發(fā)完畢后,我們調(diào)用接口查看效果:

這里我發(fā)現(xiàn)一個在本地環(huán)境使用ok,(防盜連接:本文首發(fā)自http://www.cnblogs.com/jilodream/ )但是在使用docker部署微服務(wù)時卻存在的一個異常:

 java.lang.NullPointerException: null
         at sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264)
         at sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:219)
         at sun.awt.FontConfiguration.init(FontConfiguration.java:107)
 .....

網(wǎng)上查了下,大致原因是由于我們本地使用的是oraclejdk,但是在docker中jdk的版本則采用的是openjdk。openjdk有些字體的支撐不是很友好,這里需要在制作docker鏡像時添加如下語句解決:

RUN apk add --update font-adobe-100dpi ttf-dejavu fontconfig 

到此這篇關(guān)于Springboot通過谷歌Kaptcha 組件生成圖形驗證碼功能的文章就介紹到這了,更多相關(guān)Springboot圖形驗證碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Boot如何實(shí)現(xiàn)定時任務(wù)的動態(tài)增刪啟停詳解

    Spring Boot如何實(shí)現(xiàn)定時任務(wù)的動態(tài)增刪啟停詳解

    這篇文章主要給大家介紹了關(guān)于Spring Boot如何實(shí)現(xiàn)定時任務(wù)的動態(tài)增刪啟停的相關(guān)資料,文中通過示例代碼以及圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • SpringBoot多級緩存實(shí)現(xiàn)方案總結(jié)

    SpringBoot多級緩存實(shí)現(xiàn)方案總結(jié)

    所謂多級緩存,是指在整個系統(tǒng)架構(gòu)的不同系統(tǒng)層面進(jìn)行數(shù)據(jù)緩存,以提升訪問速度,多級緩存就是為了解決項目服務(wù)中單一緩存使用不足的缺點(diǎn),本文我們將給大家總結(jié)了SpringBoot多級緩存實(shí)現(xiàn)方案,需要的朋友可以參考下
    2023-08-08
  • Java獲取線程ID的實(shí)例

    Java獲取線程ID的實(shí)例

    以下實(shí)例演示了如何使用 getThreadId() 方法獲取線程id,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-10-10
  • java stream中Collectors的用法實(shí)例精講

    java stream中Collectors的用法實(shí)例精講

    這篇文章主要為大家介紹了java stream中Collectors的用法實(shí)例精講,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Java Scanner輸入兩個數(shù)組的方法

    Java Scanner輸入兩個數(shù)組的方法

    今天小編就為大家分享一篇Java Scanner輸入兩個數(shù)組的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • java操作mongodb時,對象bean和DBObject相互轉(zhuǎn)換的方法(推薦)

    java操作mongodb時,對象bean和DBObject相互轉(zhuǎn)換的方法(推薦)

    下面小編就為大家?guī)硪黄猨ava操作mongodb時,對象bean和DBObject相互轉(zhuǎn)換的方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • java后端合成圖片的實(shí)現(xiàn)示例

    java后端合成圖片的實(shí)現(xiàn)示例

    本文主要介紹了java后端合成圖片的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • SpringDataRedis入門和序列化方式解決內(nèi)存占用問題小結(jié)

    SpringDataRedis入門和序列化方式解決內(nèi)存占用問題小結(jié)

    spring-data-redis是spring-data模塊的一部分,專門用來支持在spring管理項目對redis的操作,這篇文章主要介紹了SpringDataRedis入門和序列化方式解決內(nèi)存占用問題,需要的朋友可以參考下
    2022-12-12
  • Java下載文件的4種方式總結(jié)

    Java下載文件的4種方式總結(jié)

    這篇文章主要給大家總結(jié)介紹了關(guān)于Java下載文件的4種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • java向數(shù)據(jù)庫插入數(shù)據(jù)顯示亂碼的幾種問題解決

    java向數(shù)據(jù)庫插入數(shù)據(jù)顯示亂碼的幾種問題解決

    這篇文章主要給大家介紹了關(guān)于java向數(shù)據(jù)庫插入數(shù)據(jù)顯示亂碼問題的解決方案,文章分別羅列了前臺亂碼的問題、前臺先后臺插入數(shù)據(jù)后臺接收到的數(shù)據(jù)是亂碼以及后臺向數(shù)據(jù)庫插入數(shù)據(jù)是亂碼等幾種情況,需要的朋友可以參考下
    2021-11-11

最新評論