Hoy en día, los módulos de registro, inicio de sesión o publicación de información de muchos sistemas han agregado funciones de código aleatorio para evitar el uso de programas de registro automático o programas de publicación automática.
En realidad, el código de verificación selecciona aleatoriamente algunos caracteres y los muestra en la página en forma de imágenes. Si descarga y envía Tomato Garden, la información enviada se considera inválida. Para evitar que los programas automáticos analicen y analicen imágenes, algunas líneas de interferencia generalmente se generan aleatoriamente en la imagen o los caracteres se distorsionan, lo que dificulta el reconocimiento automático.
Copie el código de código de la siguiente manera:
paquete com.servlet;
importar java.awt.Color;
importar java.awt.Font;
importar java.awt.Graphics2D;
importar java.awt.image.BufferedImage;
importar java.util.Random;
importar javax.imageio.ImageIO;
importar javax.servlet.ServletException;
importar javax.servlet.ServletOutputStream;
importar javax.servlet.http.HttpServlet;
importar javax.servlet.http.HttpServletRequest;
importar javax.servlet.http.HttpServletResponse;
importar javax.servlet.http.HttpSession;
/**
* Generar código de verificación aleatorio
*@autor bitiliu
*
*/
la clase pública ValidateCodeServlet extiende HttpServlet
{
serialVersionUID largo final estático privado = 1L;
//El ancho de la imagen del código de verificación.
ancho int privado = 60;
//La altura de la imagen del código de verificación.
altura int privada = 20;
//El número de caracteres del código de verificación.
código int privadoCount=4;
privado int x=0;
// altura de la fuente
altura de fuente privada int;
código int privadoY;
char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W ',
'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9 ' };
/**
* Inicializar y verificar atributos de imagen.
*/
public void init() lanza ServletException
{
//Obtener información inicial de web.xml
//ancho
String strWidth=this.getInitParameter("ancho");
//alto
String strHeight=this.getInitParameter("altura");
//Número de caracteres
String strCodeCount=this.getInitParameter("codeCount");
//Convierte la información configurada en valores numéricos
intentar
{
si (strWidth!=null && strWidth.length()!=0)
{
ancho=Integer.parseInt(strWidth);
}
si (strHeight!=null && strHeight.length()!=0)
{
altura=Integer.parseInt(strHeight);
}
si (strCodeCount!=null && strCodeCount.length()!=0)
{
codeCount=Integer.parseInt(strCodeCount);
}
}
capturar(NumberFormatException e)
{}
x=ancho/(codeCount+1);
altura de fuente=altura-2;
códigoY=altura-4;
}
servicio anulado protegido (solicitud HttpServletRequest, respuesta HttpServletResponse)
lanza ServletException, java.io.IOException {
//Definir buffer de imagen
BufferedImage buffImg = nueva Imagen Buffered(
ancho, alto, Imagen Buffered.TYPE_INT_RGB);
Graphics2D g = buffImg.createGraphics();
//Crea una clase generadora de números aleatorios
Aleatorio aleatorio = nuevo Aleatorio();
//Rellena la imagen con blanco
g.setColor(Color.BLANCO);
g.fillRect(0, 0, ancho, alto);
//Crea una fuente. El tamaño de la fuente debe determinarse según la altura de la imagen.
Fuente fuente = nueva fuente ("Fixedsys", Font.PLAIN, fontHeight);
//Establecer fuente.
g.setFont(fuente);
//Dibuja un borde.
g.setColor(Color.NEGRO);
g.drawRect(0, 0, ancho - 1, alto - 1);
// Genera aleatoriamente 160 líneas de interferencia para que otros programas dificulten la detección del código de autenticación en la imagen.