1. Preface
Verification codes can be said to be very common in our lives. Any website or any app will have this function, but why do you need this? How to do it? Below, the editor will lead everyone to use Java to complete the function of a verification code.
2. The function of verification code
Generally, it can prevent people from using robots to automatically register in batches and continuously log in to specific registered users using specific programs to brute-force cracking methods. Because the verification code is a picture that mixes numbers and symbols, it looks difficult for the human eye to recognize, and it is even more difficult for the machine to recognize.
3. Java implementation
3.1 Establish a servlet class for verification code:
package com.bjpowernode.drp.util.servlet;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.IOException;import java.util.Random;import javax.imageio.ImageIO;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;/** * Verification code function generation* @author Ares * */public class AuthImage extends HttpServlet{ private static final String CONTENT_TYPE = "text/html; charset=gb2312"; //Set the size of letters, size private Font mFont = new Font("Times New Roman", Font.PLAIN, 17); public void init() throws ServletException { super.init(); } Color getRandColor(int fc,int bc) { Random random = new Random(); if(fc>255) fc=255; if(bc>255) bc=255; int r=fc+random.nextInt(bc-fc); int g=fc+random.nextInt(bc-fc); int b=fc+random.nextInt(bc-fc); int b=fc+random.nextInt(bc-fc); return new Color(r,g,b); } public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setHeader("Pragma","No-cache"); response.setHeader("Cache-Control","no-cache"); response.setDateHeader("Expires", 0); //Indicate that the generated response is the image response.setContentType("image/jpeg"); int width=100, height=18; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics(); Random random = new Random(); g.setColor(getRandColor(200,250)); g.fillRect(1, 1, width-1, height-1); g.setColor(new Color(102,102,102)); g.drawRect(0, 0, width-1, height-1); g.setFont(mFont); g.setColor(getRandColor(160,200)); //Draw a random line for (int i=0;i<155;i++) { int x = random.nextInt(width - 1); int y = random.nextInt(height - 1); int xl = random.nextInt(6) + 1; int yl = random.nextInt(12) + 1; g.drawLine(x,y,x + xl,y + yl); } //Draw a random line from the other direction for (int i = 0;i < 70;i++) { int x = random.nextInt(width - 1); int y = random.nextInt(height - 1); int xl = random.nextInt(12) + 1; int yl = random.nextInt(6) + 1; g.drawLine(x,y,x - xl,y - yl); } // Generate random numbers and convert random numbers into letters String sRand=""; for (int i=0;i<6;i++) { int itmp = random.nextInt(26) + 65; char ctmp = (char)itmp; sRand += String.valueOf(ctmp); g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110))); g.drawString(String.valueOf(ctmp),15*i+10,16); } HttpSession session = request.getSession(true); session.setAttribute("rand",sRand); g.dispose(); ImageIO.write(image, "JPEG", response.getOutputStream()); } public void destroy() { } }3.2 Configuring servlet in web.xml under WEB-INF file
//servlet name and location <servlet> <servlet-name>AuthImage</servlet-name> <servlet-class>com.bjpowernode.drp.util.servlet.AuthImage</servlet-class> </servlet> //servlet works on those mappings<servlet-mapping> <servlet-name>AuthImage</servlet-name> <url-pattern>/servlet/login/AuthImage</url-pattern> </servlet-mapping>
3.3 The front desk calls Servlet
jsp code:
<img id="img" style="cursor:pointer;" src="${pageContext.request.contextPath}/servlet/login/AuthImage" onclick="changeImg()">js:
//Click the verification code to change the image function changeImg(){ var img =document.getElementById("img"); img.src="${pageContext.request.contextPath}/servlet/login/AuthImage?d="+Math.random(); return false;}4. Summary
Through this learning of verification code, I have also gained a certain understanding of the interaction between the entire Servlet and the front-end code, and data transmission has also been greatly improved. Therefore, I still need to learn more about these skills and summarize them in the future. Only in this way can the knowledge be solid.
The above is all the content of this article. I hope it will be helpful to everyone's learning and I hope everyone will support Wulin.com more.