日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

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

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

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

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

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

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

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

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

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

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

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

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

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

后端用來生成驗證碼的核心代碼如下:o4t28資訊網——每日最新資訊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路由用來驗證用戶的操作是否正確。o4t28資訊網——每日最新資訊28at.com

ImageService 類o4t28資訊網——每日最新資訊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 對象,將原始圖像繪制到了這個新的對象上,然后在驗證碼位置上繪制了一個透明的缺口。o4t28資訊網——每日最新資訊28at.com

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

前端使用HTML和JavaScript來顯示驗證碼圖片和處理用戶的操作。核心代碼如下:o4t28資訊網——每日最新資訊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">)用來讓用戶進行操作。當用戶按下滑塊時,開始記錄滑塊的位置,當用戶釋放滑塊時,將滑塊的位置發送給后端進行驗證。o4t28資訊網——每日最新資訊28at.com

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

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

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

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

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

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

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

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

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

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

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

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
美日韩丰满少妇在线观看| 亚洲精品一区在线观看香蕉| 国产精品www色诱视频| 欧美体内谢she精2性欧美 | 欧美.日韩.国产.一区.二区| 欧美成人精品一区二区| 欧美日韩综合另类| 国产精品一区二区a| 精品不卡一区| 一区二区三区国产在线| 亚洲女同精品视频| 狂野欧美一区| 欧美午夜www高清视频| 国产一区二区成人| 日韩视频一区二区| 久久国产精品色婷婷| 欧美精品一区二区高清在线观看| 国产精品入口日韩视频大尺度| 国产美女诱惑一区二区| 亚洲人成人一区二区在线观看| 小处雏高清一区二区三区| 欧美国产日韩一区二区| 国产精品嫩草影院一区二区| 亚洲国产第一页| 精品不卡一区二区三区| 亚洲看片网站| 欧美一区二区三区在线观看视频| 欧美成人视屏| 国产美女精品人人做人人爽| 亚洲人人精品| 久久久久www| 国产精品捆绑调教| 91久久精品国产91久久性色tv | 欧美福利电影网| 国产三级精品在线不卡| 夜夜嗨av色一区二区不卡| 久久综合免费视频影院| 国产欧亚日韩视频| 一区二区久久| 免播放器亚洲| 国产亚洲人成a一在线v站| 正在播放亚洲一区| 欧美大色视频| 国产专区欧美精品| 亚洲一区二区三区涩| 欧美国产日本| 精久久久久久久久久久| 欧美一级二级三级蜜桃| 国产精品av久久久久久麻豆网| 亚洲人成在线观看一区二区| 久久久噜噜噜久久狠狠50岁| 国产精一区二区三区| 一区二区国产精品| 欧美成人午夜激情| 黑人巨大精品欧美一区二区小视频 | 欧美午夜女人视频在线| 亚洲国产精品悠悠久久琪琪| 久久精品国产2020观看福利| 国产精品美女在线观看| 在线亚洲国产精品网站| 欧美精品一区二区三区很污很色的| 伊人成年综合电影网| 欧美一区成人| 国产精品日韩在线| 亚洲午夜精品网| 欧美日韩另类在线| 亚洲精品护士| 欧美福利一区二区三区| 在线免费观看欧美| 狂野欧美性猛交xxxx巴西| 激情成人亚洲| 久久一区激情| 伊人一区二区三区久久精品| 久久婷婷国产麻豆91天堂| 国产一区二区你懂的| 久久av资源网| 国产亚洲在线| 久久九九精品99国产精品| 国自产拍偷拍福利精品免费一| 久久国产精品久久w女人spa| 国产一区二区三区直播精品电影| 欧美一区激情视频在线观看| 国产精品综合| 欧美伊人精品成人久久综合97| 国产精品综合久久久| 欧美一区亚洲| 狠狠色伊人亚洲综合网站色| 久久免费视频网| 亚洲高清不卡在线观看| 欧美成人精精品一区二区频| 亚洲精品国精品久久99热一| 欧美日韩亚洲在线| 亚洲无亚洲人成网站77777| 国产精品qvod| 亚洲欧美日韩电影| 国产日产精品一区二区三区四区的观看方式 | 欧美揉bbbbb揉bbbbb| 在线亚洲伦理| 国产精品爽黄69| 欧美专区在线播放| 亚洲第一主播视频| 欧美精品自拍| 一区二区三区四区五区精品| 国产精品免费久久久久久| 羞羞色国产精品| 伊人久久av导航| 欧美精品亚洲一区二区在线播放| 在线视频欧美日韩| 国产欧美精品| 可以看av的网站久久看| 亚洲精品久久视频| 国产精品久久久久久亚洲调教| 欧美综合国产精品久久丁香| 亚洲福利小视频| 欧美日韩亚洲在线| 欧美亚洲网站| 亚洲成人资源网| 欧美日韩精品在线| 性一交一乱一区二区洋洋av| 亚洲国产mv| 欧美日韩另类丝袜其他| 欧美一级欧美一级在线播放| **网站欧美大片在线观看| 欧美日韩在线播放一区| 欧美夜福利tv在线| 亚洲人成啪啪网站| 国产九九视频一区二区三区| 噜噜噜久久亚洲精品国产品小说| 宅男精品视频| 精品91免费| 国产精品mm| 免费看精品久久片| 亚洲欧美激情精品一区二区| 亚洲第一页在线| 国产精品mv在线观看| 老司机精品视频网站| 亚洲一区二区不卡免费| 悠悠资源网亚洲青| 国产精品扒开腿爽爽爽视频| 麻豆国产va免费精品高清在线| 亚洲视频一起| 亚洲国产精品一区二区第一页 | 国产精品另类一区| 女人香蕉久久**毛片精品| 亚洲一区在线视频| 亚洲国产精品久久久久婷婷老年 | 亚洲视屏一区| 亚洲韩国日本中文字幕| 国产伦精品一区二区三区高清版| 欧美国产激情二区三区| 欧美中文在线字幕| 亚洲视频你懂的| 亚洲高清一二三区| 国产视频一区三区| 欧美日韩一区二区三| 免费看成人av| 久久久久久香蕉网| 亚洲欧美综合一区| 日韩午夜视频在线观看| 揄拍成人国产精品视频| 国产欧美欧洲在线观看| 欧美日韩色综合| 欧美成人性生活| 久久久91精品国产一区二区精品| 亚洲校园激情| 99精品黄色片免费大全| 在线免费观看日本一区| 国产亚洲欧美中文| 国产精品国产自产拍高清av| 欧美激情一区二区三区在线视频观看| 久久久久久久网| 久久gogo国模啪啪人体图| 亚洲欧美国内爽妇网| 亚洲视频高清| 日韩一二三区视频| 亚洲日韩成人| **网站欧美大片在线观看| 狠狠色综合网站久久久久久久| 国产麻豆成人精品| 国产精品视频免费观看www| 欧美日韩国产亚洲一区| 欧美国产一区二区| 欧美二区在线播放| 欧美大片一区二区| 狼狼综合久久久久综合网| 久久久久久久久久看片| 久久九九全国免费精品观看| 久久精品欧美日韩精品| 久久www免费人成看片高清| 欧美一级一区| 久久不见久久见免费视频1| 性欧美18~19sex高清播放| 午夜久久美女| 欧美亚洲色图校园春色| 亚洲欧美日韩高清| 亚洲欧洲av一区二区三区久久| 亚洲一区免费| 亚洲欧美日韩一区二区三区在线| 亚洲一区二区三区四区五区黄 | 欧美亚洲三区| 亚久久调教视频| 久久gogo国模裸体人体| 久久精品五月婷婷| 久久亚洲不卡|