AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

Springboot3.x 中實現滑動拼圖驗證碼的全面指南

來源: 責編: 時間:2024-05-09 09:29:50 168觀看
導讀這個專題深入淺出地探討了各類驗證碼的生成和在Springboot3.x中的實踐,從基礎的滑動、點選、算術運算驗證碼到創新的藝術風格、水印、二維碼驗證碼,適合所有Java開發者閱讀。在這個專題中,不僅可以學習到技術實踐,更能領
這個專題深入淺出地探討了各類驗證碼的生成和在Springboot3.x中的實踐,從基礎的滑動、點選、算術運算驗證碼到創新的藝術風格、水印、二維碼驗證碼,適合所有Java開發者閱讀。在這個專題中,不僅可以學習到技術實踐,更能領略到驗證碼的美學魅力。讓我們一起探索驗證碼的無盡可能性。

滑動拼圖驗證碼作為用戶身份驗證的一種方式,它的主要作用是進行人機行為區分,防止針對網站或者應用的惡意機器行為。這種驗證碼尤其適用于防止惡意的批量注冊、登錄爬蟲以及自動化攻擊,比如說防止一些驗證碼識別的機器人。gTU28資訊網——每日最新資訊28at.com

基本的滑動拼圖驗證碼通常由一個背景圖像和一個缺失的圖像片段組成,用戶需要通過鼠標操作將缺失的片段準確滑動至應在的位置。在這個過程中,用戶的行為數據(包括滑動軌跡,滑動速度,滑動時間等)都可以被用來進行用戶和機器的區分,因此滑動拼圖驗證碼又有著非常高的安全性。gTU28資訊網——每日最新資訊28at.com

與傳統的文本驗證碼相比,滑動拼圖驗證碼具有更好的用戶體驗和更高的安全性:文本驗證碼往往需要用戶仔細觀察,輸入錯誤率高,給用戶帶來不便,而且現在有許多OCR技術可以成功識別文本驗證碼。滑動拼圖驗證碼則只需要用戶執行一個自然的,直覺的動作,用戶錯誤率低,同時機器人模擬出人類完全一致的行為幾乎是不可能的。gTU28資訊網——每日最新資訊28at.com

理解原理:滑動拼圖驗證碼的運行機制

滑動拼圖驗證碼的運行包括了后端服務和前端交互兩大部分,我們先來知道整體的流程,再逐一深入。gTU28資訊網——每日最新資訊28at.com

  1. 后端生成圖像:后端首先生成一張完整的圖像和一個帶有缺口的復制圖像。這個缺口通常是一個特定的形狀,如圓形、方形等,或者是一段特定輪廓的形狀。這樣就形成了一對背景圖像和滑塊圖像,缺口的形狀和大小在這兩張圖像中是完全一致的。
  2. 前端展示與交互:后端將這兩張圖像發送給前端,前端將背景圖像正常展示,而滑塊圖像則位于一邊,等待用戶進行拖動。
  3. 用戶操作滑塊:用戶通過鼠標或觸屏操作,將滑塊圖像拖動至背景圖像中的缺口部分。在這個操作過程中,前端會記錄下用戶的行為數據,這些數據包括但不限于滑動開始和結束的時間、滑動軌跡、滑動速度等。
  4. 前端發送驗證數據:當用戶完成拖動后,或者用戶拖動滑塊超出一定范圍后,前端將滑動的結果以及行為數據發送給后端。這個結果就是滑塊在背景圖像中的位置,或者說是滑動的距離。
  5. 后端驗證:后端根據發送來的滑動結果,以及用戶的行為數據,進行驗證。如果滑動結果與后端最初設定的缺口位置一致,或者在一定的誤差范圍內,同時用戶的行為數據也符合正常人類的行為,那么后端判定這次驗證碼驗證成功,返回驗證成功的結果。

技術實現:在Springboot3.x中如何生成滑動拼圖驗證碼

下面我們將實現一個簡單的 Spring Boot 工程來生成滑動拼圖驗證碼。我們的項目中主要包括四個部分,分別為原始圖片的獲取,將原始圖片轉換為帶缺口的滑動驗證碼圖片,前端的驗證碼顯示和操作以及后端的數據驗證。gTU28資訊網——每日最新資訊28at.com

后端:生成滑動拼圖驗證碼

我們首先需要一個原始圖片,這個圖片將會被轉換為驗證碼圖片。原始圖片可以是任何圖片文件,例如originalImage.png,存放在項目的資源文件夾中。gTU28資訊網——每日最新資訊28at.com

后端用來生成驗證碼的核心代碼如下:gTU28資訊網——每日最新資訊28at.com

@RestControllerpublic class ImageController {    private final ImageService imageService;    public ImageController(ImageService imageService) {        this.imageService = imageService;    }    @GetMapping("/captcha")    public ResponseEntity<byte[]> getCaptcha(HttpSession session) throws IOException {        BufferedImage captchaImage = imageService.createCaptchaImage();        session.setAttribute("captcha", imageService.getCaptchaPosition());        ByteArrayOutputStream baos = new ByteArrayOutputStream();        ImageIO.write(captchaImage, "png", baos);        byte[] imageInByte = baos.toByteArray();        return ResponseEntity.ok()                .header(HttpHeaders.CONTENT_TYPE, MediaType.IMAGE_PNG_VALUE)                .body(imageInByte);    }    @PostMapping("/validate")    public boolean validateCaptcha(@RequestParam int position, HttpSession session) {        Integer captchaPosition = (Integer) session.getAttribute("captcha");        if (captchaPosition != null) {            return Math.abs(captchaPosition - position) <= 5;        }        return false;    }}

在這段代碼中,/captcha路由用來生成驗證碼圖片并返回給前端,生成的驗證碼圖片是一個PNG格式的圖片。同時,將驗證碼圖片中缺口的位置保存在session中,用來進行后續的驗證。/validate路由用來驗證用戶的操作是否正確。gTU28資訊網——每日最新資訊28at.com

ImageService 類gTU28資訊網——每日最新資訊28at.com

import org.springframework.stereotype.Service;import java.awt.*;import java.awt.image.BufferedImage;import java.io.IOException;import java.io.InputStream;import java.nio.file.Paths;import javax.imageio.ImageIO;import java.util.Random;@Servicepublic class ImageService {    private int captchaPosition;    public BufferedImage createCaptchaImage() throws IOException {        BufferedImage originalImage = readImageFromResources();        captchaPosition = generateRandomCaptchaPosition(originalImage.getWidth());        BufferedImage captchaImage = new BufferedImage(                originalImage.getWidth(),                originalImage.getHeight(),                originalImage.getType());        int pieceWidth = originalImage.getWidth() / 8;        // 繪制原始圖像        Graphics2D graphics2D = captchaImage.createGraphics();        graphics2D.drawImage(originalImage, 0, 0, null);        // 在原始位置繪制一個帶形狀的片段        graphics2D.setComposite(AlphaComposite.Clear);        graphics2D.fillRoundRect(captchaPosition, captchaImage.getHeight() / 2, pieceWidth, pieceWidth, 10, 10);        graphics2D.dispose();        return captchaImage;    }    private BufferedImage readImageFromResources() throws IOException {        InputStream inputStream = getClass().getResourceAsStream(Paths.get("path_to_resources", "originalImage.png").toString());        return ImageIO.read(inputStream);    }    private static int generateRandomCaptchaPosition(int width) {        Random random = new Random();        return random.nextInt(width / 2) + width / 4; // 將片段定位到圖像的中央位置    }    public int getCaptchaPosition() {        return captchaPosition;    }}

這個 ImageService 類實現了 createCaptchaImage 方法,這個方法可以生成一個滑動拼圖驗證碼。首先,它讀取了一個原始的圖像文件,然后隨機生成了一個驗證碼的位置。接著,它創建了一個新的 BufferedImage 對象,將原始圖像繪制到了這個新的對象上,然后在驗證碼位置上繪制了一個透明的缺口。gTU28資訊網——每日最新資訊28at.com

前端:驗證碼的顯示和操作

前端使用HTML和JavaScript來顯示驗證碼圖片和處理用戶的操作。核心代碼如下:gTU28資訊網——每日最新資訊28at.com

<img id="captcha" src="api/captcha" /><div id="slider"><div id="knob"></div></div><script>  const slider = document.getElementById('slider');  const knob = document.getElementById('knob');  knob.onmousedown = function(event) {    event.preventDefault();    let shiftX = event.clientX - knob.getBoundingClientRect().left;    document.addEventListener('mousemove', onMouseMove);    document.addEventListener('mouseup', onMouseUp);    function onMouseMove(event) {      let newLeft = event.clientX - shiftX - slider.getBoundingClientRect().left;      if (newLeft < 0) newLeft = 0;      let rightEdge = slider.offsetWidth - knob.offsetWidth;      if (newLeft > rightEdge) newLeft = rightEdge;      knob.style.left = newLeft + 'px';    }    function onMouseUp() {      document.removeEventListener('mouseup', onMouseUp);      document.removeEventListener('mousemove', onMouseMove);      validateCaptcha(parseInt(knob.style.left));    }  };  knob.ondragstart = function() { return false; }  function validateCaptcha(position) {    fetch('api/validate?position=' + position, {method: 'POST'})      .then(response => response.json())      .then(data => { /* process the validation result */ });  }</script>

在這段代碼中,顯示驗證碼的元素從后端請求驗證碼圖片。滑動條(<div id="slider">)和滑塊(<div id="knob">)用來讓用戶進行操作。當用戶按下滑塊時,開始記錄滑塊的位置,當用戶釋放滑塊時,將滑塊的位置發送給后端進行驗證。gTU28資訊網——每日最新資訊28at.com

實戰應用:滑動拼圖驗證碼的應用示例

滑動拼圖驗證碼是一種常見的人機驗證工具,主要用于區別用戶是人還是機器人。其操作方式通常是,用戶通過拖動滑塊,將一個圖形拼圖從初始位置移動到一個預定的位置,如此一來,系統就可以通過這種操作行為來判斷用戶是否為人類。下面是一個具體的應用示例:gTU28資訊網——每日最新資訊28at.com

假如你正在構建一個網站,希望在用戶注冊或登錄時,通過滑動拼圖驗證碼來增強系統的安全防護。在用戶填寫完用戶名和密碼后,必須要求他們通過滑動拼圖驗證碼的驗證,才能進一步操作。gTU28資訊網——每日最新資訊28at.com

  1. 用戶首先訪問你的網站,并點擊注冊或登錄按鈕。
  2. 用戶在相應的輸入框內填入用戶名和密碼。
  3. 此時,網站會顯示出一個滑動拼圖驗證碼,同時,網站也會提示用戶需要通過拖動滑塊,將拼圖移動到正確的位置。
  4. 用戶根據提示操作,移動滑塊,將拼圖還原到指定位置。
  5. 用戶成功完成滑動拼圖驗證碼后,就可以繼續注冊或登錄操作。

引入滑動拼圖驗證碼,可以有效增強你的網站對惡意機器人的防護能力,從而提高用戶數據的安全性。同時,這種方式也很友好,用戶體驗良好,是一種十分實用的人機交互方式。gTU28資訊網——每日最新資訊28at.com

本文詳細而深入地介紹了滑動拼圖驗證碼的工作原理及其在實戰中的應用。文章首先解釋了什么是滑動拼圖驗證碼,它如何幫助識別用戶是否為人類,提高系統的安全性。然后,文章通過一個具體的實例,詳細地描述了如何在用戶注冊和登錄的過程中,使用滑動拼圖驗證碼增強網站的安全防護能力。總結而言,滑動拼圖驗證碼是一種有效且用戶體驗良好的防護機制,能夠針對惡意機器人采取防護措施,提高用戶數據的安全性。gTU28資訊網——每日最新資訊28at.com

gTU28資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-87508-0.htmlSpringboot3.x 中實現滑動拼圖驗證碼的全面指南

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Python數據庫操作利器:連接Oracle數據庫完全指南

下一篇: 小巧便攜,靜享聆聽 森海塞爾推出全新 ACCENTUM 真無線耳機

標簽:
  • 熱門焦點
  • 一加Ace2 Pro官宣:普及16G內存 引領24G

    一加官方今天繼續為本月發布的新機一加Ace2 Pro帶來預熱,公布了內存方面的信息。“淘汰 8GB ,12GB 起步,16GB 普及,24GB 引領,還有呢?#一加Ace2Pro#,2023 年 8 月,敬請期待。”同時
  • 2023年Q2用戶偏好榜:12+256G版本成新主流

    3月份的性能榜、性價比榜和好評榜之后,就要輪到2023年的第二季度偏好榜了,上半年的新機潮已經過去,最明顯的肯定就是大內存和存儲的機型了,另外部分中端機也取消了屏幕塑料支架
  • Flowable工作流引擎的科普與實踐

    一.引言當我們在日常工作和業務中需要進行各種審批流程時,可能會面臨一系列技術和業務上的挑戰。手動處理這些審批流程可能會導致開發成本的增加以及業務復雜度的上升。在這
  • 如何使用JavaScript創建一只圖像放大鏡?

    譯者 | 布加迪審校 | 重樓如果您曾經瀏覽過購物網站,可能遇到過圖像放大功能。它可以讓您放大圖像的特定區域,以便瀏覽。結合這個小小的重要功能可以大大改善您網站的用戶體驗
  • 破圈是B站頭上的緊箍咒

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之每年的暑期檔都少不了瞄準追劇女孩們的古偶劇集,2021年有優酷的《山河令》,2022年有愛奇藝的《蒼蘭訣》,今年卻輪到小破站抓住了追
  • 品牌洞察丨服務本地,美團直播成效幾何?

    來源:17PR7月11日,美團App首頁推薦位出現&ldquo;美團直播&rdquo;的固定入口。在直播聚合頁面,外賣&ldquo;神槍手&rdquo;直播間、美團旅行直播間、美團買菜直播間等均已上線,同時
  • 超閉合精工鉸鏈 徹底消滅縫隙 三星Galaxy Z Flip5與Galaxy Z Fold5發布

    2023年7月26日,三星電子正式發布了Galaxy Z Flip5與Galaxy Z Fold5。三星新一代折疊屏手機采用超閉合精工鉸鏈,讓折疊后的縫隙不再可見。同時,配合處
  • 超級標準版旗艦!iQOO 11S全球首發iQOO超算獨顯芯片

    上半年已接近尾聲,截至目前各大品牌旗下的頂級旗艦都已悉數亮相,而下半年即將推出的頂級旗艦已經成為了數碼圈爆料的主流,其中就包括全新的iQOO 11S系
  • 中關村論壇11月25日開幕,15位諾獎級大咖將發表演講

    11月18日,記者從2022中關村論壇新聞發布會上獲悉,中關村論壇將于11月25至30日在京舉行。本屆中關村論壇由科學技術部、國家發展改革委、工業和信息化部、國務
Top