欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java 生成隨機(jī)驗(yàn)證碼圖片的示例

 更新時(shí)間:2020年10月21日 11:08:38   作者:Marydon  
這篇文章主要介紹了Java 生成隨機(jī)驗(yàn)證碼圖片的示例,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下

1.情景展示

  登錄時(shí),生成隨機(jī)驗(yàn)證碼圖片,如何實(shí)現(xiàn)?    

2.原因分析

  后臺(tái)生成驗(yàn)證碼并生成圖片返回至前臺(tái) 

3.解決方案

  導(dǎo)包

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.RandomStringUtils;
import base.web.tools.WebUtils;

  獲取驗(yàn)證碼請(qǐng)求處理

/**
 * 獲取驗(yàn)證碼
 * @explain
 * @return 隨機(jī)數(shù)圖片
 */
public String getImage() {
    try {
        int width = 55;
        int height = 25;
        // 取得一個(gè)4位隨機(jī)數(shù)字字符串
        String s = RandomStringUtils.randomNumeric(4);
        HttpServletResponse response = WebUtils.getResponse();
        // 存入cookie,用于與用戶的輸入進(jìn)行比較
        Cookie cookie = new Cookie("validateCode", s);
        response.addCookie(cookie);
        response.setContentType("images/jpeg");
        response.setHeader("Cache-Control", "no-cache");
 
        ServletOutputStream out = response.getOutputStream();
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Graphics g = image.getGraphics();
        // 設(shè)定背景色
        g.setColor(getRandColor(200, 250));
        g.fillRect(0, 0, width, height);
 
        // 設(shè)置字體
        Font mFont = new Font("宋體", Font.BOLD, 18);
        g.setFont(mFont);
 
        // 畫(huà)邊框
        // g.setColor(Color.BLACK);
        // g.drawRect(0, 0, width - 1, height - 1);
 
        // 生成隨機(jī)類
        Random random = new Random();
        // 將認(rèn)證碼顯示到圖象中
        g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));
        // 將驗(yàn)證碼畫(huà)進(jìn)圖片
        g.drawString(s, 5, 20);
        // 圖象生效
        g.dispose();
        // 輸出圖象到頁(yè)面
        ImageIO.write((BufferedImage) image, "JPEG", out);
        out.flush();
        out.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}
 
/**
 * 給定范圍獲得隨機(jī)顏色
 * @explain
 * @param fc
 * @param bc
 * @return
 */
private Color getRandColor(int fc, int bc) {
    Random random = new Random();
    fc = (fc > 255) ? 255 : fc;
    bc = (bc > 255) ? 255 : bc;
    // 獲取3次
    int r = fc + random.nextInt(bc - fc);
    int g = fc + random.nextInt(bc - fc);
    int b = fc + random.nextInt(bc - fc);
    return new Color(r, g, b);
}

  html片段

<img src="<c:url value="/getImage.do"/>" id="randomImage" style="cursor: pointer;vertical-align: bottom" height="35px" width="100px" onclick='sjs()' />  

  js片段

function sjs () {
    // 獲取圖片請(qǐng)求后面加一個(gè)隨機(jī)參數(shù),是為了避免同一個(gè)請(qǐng)求瀏覽器拒絕向服務(wù)器發(fā)送請(qǐng)求的問(wèn)題(緩存)
    $("#randomImage")[0].src = baseUrl + "/getImage.do?s=" + Math.random();
};

寫(xiě)在最后

  哪位大佬如若發(fā)現(xiàn)文章存在紕漏之處或需要補(bǔ)充更多內(nèi)容,歡迎留言!??!

本文作者:Marydon

原文鏈接:https://www.cnblogs.com/Marydon20170307/p/12807842.html

以上就是Java 生成隨機(jī)驗(yàn)證碼圖片的示例的詳細(xì)內(nèi)容,更多關(guān)于Java 生成驗(yàn)證碼的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Spring集成Redis詳解代碼示例

    Spring集成Redis詳解代碼示例

    這篇文章主要介紹了Spring集成Redis詳解代碼示例,介紹了Eclipse工程結(jié)構(gòu),POM依賴,Spring配置,Redis配置信息以及Java代碼等相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • 利用Java實(shí)現(xiàn)mTLS調(diào)用

    利用Java實(shí)現(xiàn)mTLS調(diào)用

    這篇文章主要介紹使用 Java作為客戶端 與受 mTLS 保護(hù)的服務(wù)交互。為了對(duì)我們的 Java 客戶端進(jìn)行 ssl 配置,我們需要先設(shè)置一個(gè) SSLContext。這簡(jiǎn)化了事情,因?yàn)?SSLContext 可用于各種 http 客戶端,接下來(lái)我們一起進(jìn)入下面文章了解具體內(nèi)容,需要的朋友可以參考一下
    2021-11-11
  • Java8新特性之默認(rèn)方法和靜態(tài)方法

    Java8新特性之默認(rèn)方法和靜態(tài)方法

    這篇文章主要給大家介紹了關(guān)于Java8新特性之默認(rèn)方法和靜態(tài)方法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Netty的心跳檢測(cè)解析

    Netty的心跳檢測(cè)解析

    這篇文章主要介紹了Netty的心跳檢測(cè)解析,客戶端的心跳檢測(cè)對(duì)于任何長(zhǎng)連接的應(yīng)用來(lái)說(shuō),都是一個(gè)非?;A(chǔ)的功能,要理解心跳的重要性,首先需要從網(wǎng)絡(luò)連接假死的現(xiàn)象說(shuō)起,需要的朋友可以參考下
    2023-12-12
  • java實(shí)現(xiàn)秒表功能

    java實(shí)現(xiàn)秒表功能

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)秒表功能,利用javax.swing.Timer類設(shè)計(jì)實(shí)現(xiàn)秒表應(yīng)用程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • 基于Calendar獲取當(dāng)前時(shí)間的性能比較

    基于Calendar獲取當(dāng)前時(shí)間的性能比較

    這篇文章主要介紹了Calendar獲取當(dāng)前時(shí)間的性能比較,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 從0到1構(gòu)建springboot web應(yīng)用鏡像并使用容器部署的過(guò)程

    從0到1構(gòu)建springboot web應(yīng)用鏡像并使用容器部署的過(guò)程

    這篇文章主要介紹了從0到1構(gòu)建springboot web應(yīng)用鏡像并使用容器部署,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • Mapper類中存在名稱相同的方法重載報(bào)錯(cuò)問(wèn)題

    Mapper類中存在名稱相同的方法重載報(bào)錯(cuò)問(wèn)題

    這篇文章主要介紹了Mapper類中存在名稱相同的方法重載報(bào)錯(cuò)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java如何手動(dòng)創(chuàng)建線程池

    Java如何手動(dòng)創(chuàng)建線程池

    這篇文章主要介紹了Java如何手動(dòng)創(chuàng)建線程池,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • springboot+Quartz實(shí)現(xiàn)任務(wù)調(diào)度的示例代碼

    springboot+Quartz實(shí)現(xiàn)任務(wù)調(diào)度的示例代碼

    本篇文章主要介紹了springboot + Quartz 實(shí)現(xiàn)任務(wù)調(diào)度的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02

最新評(píng)論