91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java怎么實現后臺驗證碼生成

發布時間:2022-02-28 10:40:58 來源:億速云 閱讀:200 作者:iii 欄目:開發技術

這篇“Java怎么實現后臺驗證碼生成”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Java怎么實現后臺驗證碼生成”文章吧。

1.適用需求

后臺生成驗證碼,用于登陸驗證。

2. 功能實現所需控件/文件:

無(普通標簽)

3.功能點實現思路

1)前臺思路:

(1)前臺一個<input>用于輸入驗證碼;一個<img>用于展示驗證碼。

(2)驗證碼生成以及展示,點擊刷新功能,可以為<img>綁定click事件。

(3)click事件里面寫ajax請求,通過后臺生成處理好的帶噪點的驗證碼圖片。

注意:后臺直接返回圖片,不是驗證碼的字符!若返回字符,則驗證碼就失去了意義(前臺很容易就可以獲取驗證碼字符,進行多次惡意訪問了)(這點考慮了系統安全性)

(4)關于返回的圖片如何在<img>標簽內展示

直接利用img的src屬性,屬性值為后臺生成驗證碼的方法請求路徑即可。當點擊驗證碼的時候,再動態設置src屬性即可(原訪問地址+隨機時間戳,防止同一路徑瀏覽器不另作訪問的問題)

前臺部分代碼:

/*驗證碼輸入框*/
 
<input class="verifyInput"  name="verifyInput" placeholder="請輸入驗證碼">   
 
 
/*驗證碼圖片*/
 
<img class="verifyCode" onclick="changeCode()" src="https://atts.yisu.com/attachments/getVerifyCode">
 
//src的getVerifyCode是后臺訪問地址;項目為SSM框架。
 
 
/*點擊刷新驗證碼*/
 
function changeCode(){
 
         var src = " getVerifyCode?"+new Date().getTime(); //加時間戳,防止瀏覽器利用緩存
 
    $('.verifyCode').attr("src",src);                  //jQuery寫法
 
}

2)后臺思路:

后臺思路很簡單,利用BufferedImage類創建一張圖片,再用Graphics2D對圖片進行繪制(生成隨機字符,添加噪點,干擾線)即可。注意生成的驗證碼字符串要放到session中,用于接下來登陸的驗證碼驗證(當然也是后臺)。

部分代碼如下:

/* 獲取驗證碼圖片*/
 
         @RequestMapping("/getVerifyCode ")
 
         public void getVerificationCode(HttpServletResponse response,HttpServletRequest request) {
 
                   try {
 
                            int width=200;
 
                            int height=69;
 
         BufferedImage verifyImg=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
 
//生成對應寬高的初始圖片
 
                            String randomText = VerifyCode.drawRandomText(width,height,verifyImg);
 
//單獨的一個類方法,出于代碼復用考慮,進行了封裝。
 
//功能是生成驗證碼字符并加上噪點,干擾線,返回值為驗證碼字符                   
 
request.getSession().setAttribute("verifyCode", randomText);
 
                   response.setContentType("image/png");//必須設置響應內容類型為圖片,否則前臺不識別
 
                 OutputStream os = response.getOutputStream(); //獲取文件輸出流    
 
                 ImageIO.write(verifyImg,"png",os);//輸出圖片流
 
                 os.flush();
 
                 os.close();//關閉流
 
                   } catch (IOException e) {
 
                            this.logger.error(e.getMessage());
 
                            e.printStackTrace();
 
                   }
 
         }
/*對圖片進行處理的類和方法*/
 
public class VerifyCode {  
 
    public static  String drawRandomText(int width,int height,BufferedImage verifyImg) {
             Graphics2D graphics = (Graphics2D)verifyImg.getGraphics();
             graphics.setColor(Color.WHITE);//設置畫筆顏色-驗證碼背景色
             graphics.fillRect(0, 0, width, height);//填充背景
        graphics.setFont(new Font("微軟雅黑", Font.BOLD, 40));
        //數字和字母的組合
String baseNumLetter= = "123456789abcdefghijklmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ";
 
        StringBuffer sBuffer = new StringBuffer();
        int x = 10;  //旋轉原點的 x 坐標
        String ch = "";
        Random random = new Random();
        for(int i = 0;i < 4;i++){
                 graphics.setColor(getRandomColor());
            //設置字體旋轉角度
            int degree = random.nextInt() % 30;  //角度小于30度
            int dot = random.nextInt(baseNumLetter.length());
            ch = baseNumLetter.charAt(dot) + "";
            sBuffer.append(ch);
            //正向旋轉
            graphics.rotate(degree * Math.PI / 180, x, 45);
            graphics.drawString(ch, x, 45);
            //反向旋轉
            graphics.rotate(-degree * Math.PI / 180, x, 45);
            x += 48;
        }
        //畫干擾線
        for (int i = 0; i <6; i++) {
            // 設置隨機顏色
                 graphics.setColor(getRandomColor());
            // 隨機畫線
                 graphics.drawLine(random.nextInt(width), random.nextInt(height),
                                    random.nextInt(width), random.nextInt(height));
        }
        //添加噪點
        for(int i=0;i<30;i++){
                 int x1 = random.nextInt(width);
                 int y1 = random.nextInt(height);
                 graphics.setColor(getRandomColor());
                 graphics.fillRect(x1, y1, 2,2);
                 }
        return sBuffer.toString();
    }
    /**
     * 隨機取色
 
     */
    private static Color getRandomColor() {
        Random ran = new Random();
        Color color = new Color(ran.nextInt(256),
                ran.nextInt(256), ran.nextInt(256));
        return color;
    }
}

以上就是關于“Java怎么實現后臺驗證碼生成”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宿州市| 苗栗县| 电白县| 黄梅县| 大同县| 吉木萨尔县| 吕梁市| 叙永县| 大埔区| 婺源县| 深州市| 从化市| 克拉玛依市| 惠来县| 亚东县| 本溪| 城市| 五常市| 明溪县| 新兴县| 漳平市| 南安市| 张北县| 沈阳市| 武功县| 宁南县| 云梦县| 崇阳县| 新安县| 瓦房店市| 体育| 临沧市| 安徽省| 漾濞| 玉山县| 东丽区| 新化县| 德兴市| 吉木萨尔县| 高雄市| 铁岭市|