Ferramentas:
pacote com.lhy.web.servlet; importar java.awt.basicstroke; importar java.awt.color; importar java.awt.font; importar java.awt.graphics2d; import java.awt.image.bufferedimage; import java.ImExoundFilenotfile; java.io.ioException; importar java.io.OutputStream; importar java.util.random; importar javax.imageio.imageio; classe pública verifiquecode {private int w = 70; // comprimento de imagem privado int h = 35; // larth private Random r = novo de aleatoriamente () // Classe de geração aleatoriamente Font "," Técnica Kai Chinesa "," Fonte em negrito "," Novo chinês WEI "," Lishu chinês "," Microsoft elegante preto "," Kai Technique_GB2312 "} String privada [] Fontnames = {" Song Font "," Kai Technique "," Bold Font "," MicroSoft Blimging {"Song Font", Chinese Kai, "Technique", "Bold Font", " // Código de verificação caracteres opcionais Private String Codes = "23456789ABCDEFGHJKMNOPQRSTUVUVWXYZABCDEFGHJKMNPQRSTUVWXYZ"; // cor de fundo cor privada bgcolor = nova cor (255, 255, 255); // texto no código de verificação text de string privada; // gerar cores aleatórias de cor privada aleatomcolor () {int vermelho = r.nextint (150); int verde = r.nextint (150); int azul = r.nextint (150); devolver nova cor (vermelha, verde, azul); } // gerar font aleatório Private Font RandomFont () {int index = r.NextInt (fontnames.length); String fontname = fontNames [index]; // gerar nome aleatório da fonte int style = r.nextint (4); // gerar estilo aleatório, 0 (sem estilo), 1 (negrito), 2 (itálico), 3 (negrito + itálico) int tamanho = r.nextint (5) + 24; // gerar tamanho de fonte aleatória, 24 ~ 28 Retornar nova fonte (fontname, estilo, tamanho); } // desenhar linhas de interferência private void DrawLine (imagem bufferImage) {int num = 3; // desenhar 3 gráficos2d g2 = (graphics2d) image.getGraphics (); for (int i = 0; i <num; i ++) {// Crie as coordenadas de dois pontos, ou seja, 4 valores int x1 = r.nextint (w); int y1 = r.nextint (h); int x2 = r.nextint (w); int y2 = r.nextint (h); G2.SetStroke (novo BasicStroke (1.5F)); g2.setColor (color.blue); // A linha de interferência é azul g2.drawline (x1, y1, x2, y2); // linha de desenho}} // gerar aleatoriamente um caractere privado char aleatory () {int index = r.nextint (codes.length ()); Return Codes.Charat (Index); } // Crie bufferImage Private BufferImage CreateImage () {// Largura, altura, tipo de imagem Imagem bufferedImage = new bufferiMage (w, h, bufferiMage.type_int_rgb); Graphics2d G2 = (Graphics2d) image.getGraphics (); g2.setColor (this.bgcolor); g2.FillRect (0, 0, W, H); imagem de retorno; } // retorna o texto no código de verificação imagem public string getText () {return text; } // Salve a imagem no fluxo de saída especificado em saída estática public estática (imagem bufferImage, outputStream Out) lança a ioexception {imageio.write (imagem, "jpeg", out); } // Ligue para este método para obter o código de verificação public bufferImage getImage () {bufferedImage image = createImage (); // Crie o buffer de imagem Graphics2d g2 = (graphics2d) image.getGraphics (); // obtenha o ambiente de desenho SBuilder sb = novo stringbuilder () // use para carregar para carregar para carregar i ++) {// loop quatro vezes, cada vez que gera uma string de um caractere S = aleatherchar ()+""; // gerar uma letra sb.append (s); // Adicione letras ao sb float x = i * 1.0f * w /4; // Defina as coordenadas x-exis do caractere atual G2.SetFont (RandomFont ()); // Defina a fonte aleatória G2.SetColor (RandomColor ()); // Definir cores aleatórias G2.DrawString (S, X, H-5); // desenhe uma figura} this.text = sb.toString (); // atribui a sequência gerada a esta.text DrawLine (imagem); // Adicione a imagem de retorno da linha de interferência; } public static void main(String[] args) throws FileNotFoundException, IOException { VerifyCode vc = new VerifyCode();//Create the object of the VerifyCode class BufferedImage bi = vc.getImage();//Call getImage() method to get a BufferedImage object VerifyCode.output(bi, new FileOutputStream("C:/Verification Code 3.jpg ")); // Chame o método estático de saída () para salvar a imagem no sistema de saída de arquivo System.out.println (vc.getText ()); // Imprima o valor de texto do código de verificação no console}}VerifiqueCodServlet:
package com.lhy.web.servlet;import java.awt.image.BufferedImage;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.httpServletResponse; classe pública verifyCodServlet estende httpServlet {public void Doget (httpServletReQuest Solicy, httpServLetResponse Respons) SERVETEXCECTIONSE O TEMPEÇÃO { /** 1. GeneAte* 2. vc = new verifyCode (); BufferImage imagem = vc.getImage (); request.getSession (). SetAttribute ("session_vcode", vc.getText ()); // salve o texto na imagem no campo Sessão VerifyCode.Output (imagem, resposta.getOutStream ()); }}LogInservlet:
pacote com.lhy.web.servlet; importar java.io.ioException; importar javax.servlet.requestdispatcher; importar javax.servlet.servletexception; import javax.servlet.http.cookie; import javax.servlet.http.http.httslet; javax.servlet.http.httpServletReQuest; importar javax.servlet.http.httpServletRequest; importar javax.servlet.http.httpServLeRestonse; DoPost (Solicitação de HttpServletRequest, Resposta HttpServletResponse) lança servletexception, ioexception { /** Código de verificação de verificação* 1. Obtenha o código de verificação correto da sessão* 2. Obtenha o código de verificação preenchido pelo usuário do formulário* 3. * 4. Se o mesmo for verdadeiro, desça, caso contrário, salve a mensagem de erro no domínio da solicitação e encaminhe para login.jsp */ string sessionCode = (string) request.getSession (). GetAttribute ("session_vcode"); String paramcode = request.getParameter ("verifyCode"); if (! paramcode.equalsignorecase (sessionCode)) {request.setAttribute ("msg", "erro de código de verificação!"); request.getRequestDispatcher ("/login.jsp"). Forward (solicitação, resposta); retornar; } /** 1. Obtenha dados de formulário* / // lidera as perguntas chinesas Request.Setcharacterencoding ("UTF-8"); // get string userName = request.getParameter ("nome de usuário"); String senha = request.getParameter ("senha"); /** 2. Verifique se o nome de usuário e a senha estão corretos*/if ("itcast" .equalsignorecase (nome de usuário)) {// login com sucesso/** Item adicional: salve o nome de usuário para o cookie e envie a solicitação para o lógico. Cookie ("Uname", nome de usuário); // Crie cookie cookie.setMaxage (60* 60* 24); // Defina a vida útil do cookie como 1 dia de resposta.addcookie (cookie); // salvar cookie/** 3. Se bem -sucedido*> Salvar informações do usuário em sessão*> Redirect para succ1.jsp*/htpsSession. session.setAttribute ("nome de usuário", nome de usuário); // salve o nome de usuário no domínio da sessão Response.sendRedirect ("/test/succ1.jsp"); } else {// login falhou/** 4. Se falhou*> Salvar mensagem de erro para solicitar domínio*> encaminhe para login.jsp*/request.setAttribute ("msg", "erro em nome de usuário ou senha!"); RequestDispatcher qr = request.getRequestDispatcher ("/login.jsp"); // Get Forwarder Qr.login.jsp:
<%@ página de página = "java" import = "java.util.*" PageEncoding = "utf-8"%> <%string path = request.getContextPath (); string basepath = request.getscheme ()+": //"+request.getSername ()+":"+request.g); "-// w3c // dtd html 4.01 transitória // pt"> <html> <head> <base href = "<%= bashepath%>" rel = "Nofollow externo"> <title> meu jsp 'login.jsp' página </title> <meta http-metaquiv = " http-equiv = "cache-control" content = "no-cache"> <meta http-equiv = "expire" content = "0"> <meta http-equiv = "palavras-chave" content = "keyword1, keyword2, palavra-chave"> <magle http-equiv = "descrição" "content1, keyword2, palavra-chave"> <magle http-ouquiv = "descrição" " type = "text/css" href = "styles.css" rel = "Nofollow externo"> -> <script type = "text/javascript"> function _change () {/ * 1. Obtenha o elemento img 2. imgele.src = "<%= bashepath%> servlet/verifyCodEserverlet? A =" + new Date (). getTime ();} </sCript> </ad Head> <body> <%-Esta página fornece um formulário de login e também exibe a mensagem de erro-%> <h1> login </h1> <%*leia o cozinheiro the Cookie! Se estiver vazio, é exibido: "" Se não estiver vazio, é exibido: o valor do cookie */string uname = ""; cookie [] cs = request.getcookies (); // Obtenha todos os cookies no (cs) (null) {// se houver um cookie para (cookie c: cs) {/loop por loop. {// Procure o cookie chamado uname uname = c.getValue (); // obtenha o valor desse cookie e dê a variável uname}}}%> <% string message = ""; String msg = (string) request.getAttribute ("msg"); // Obtenha o atributo chamado msg no campo de solicitação if (msg! = Null) {message = msg; }%> <font color = "Red"> <b> <%= message%> </b> </font> <formulário action = "Servlet/LogInServlet" Method = "post"> <%-mostre o nome do usuário no cookie para a caixa de texto do nome de usuário <Bext = Username: <input Type = "" Nome = "Username" Value = "%="%> name = "senha"/> <br/> Código de verificação: <input type = "text" name = "verifyCode" size = "3"/> <img id = "img" src = "<%= basepath%> servlet/verifyCodEServlet"/> <a href "" javascript: _change () " type = "submit" value = "login"/> </morm> </body> </html>LogInsuccess:
<Body> <H1> succ1 </h1> <%string userName = (string) session.getAttribute ("nome de usuário"); if (nome de usuário == null) {/ * 1. Salvar a mensagem de erro no domínio da solicitação e encaminhá -lo para login.jsp */request.settribute ("msg", "você não é login em ainda! request.getRequestDispatcher ("/login.jsp"). Forward (solicitação, resposta); retornar;}%> Bem -vindo, acolhimento caloroso, bem -vindo <%=username %> líder para orientar o trabalho!
</body> </html>
Arquivo de configuração:
<Verlet> <Verlet-name> LogInservlet </servlet-name> <Servlet-class> com.lhy.web.servlet.loginservlet </servlet-class> </servlet> <Verlet-Mapping> <rivet-Mapping> <ervlet-name> logInserlet </servlet-name> <re-e-PTSTERN>/LOVAPTN> <Verlet> <Verlet-name> verifyCodServlet </servlet-name> <Servlet-class> com.lhy.web.servlet.verifyCodServlet </servlet-class> </servlet> <url-mapping> <arerlet-name> verifyCodElertlet </servlet> <erll-Papping> </servlet-mapping>
Sugestão: é melhor definir o servlet que gera o código de verificação sem cache, para que você não precise adicionar um registro de data e hora quando a página solicitar a imagem do código de verificação. Adicionar o registro de data e hora é enganar o navegador para impedir que o navegador leia a imagem do código de verificação no cache, e não há resposta depois de clicar para alterá -la. Isso não é uma coisa boa. Toda vez que clico para alterar outra foto, o navegador cache as imagens recém -obtidas localmente. Se não for armazenado em cache no servlet, não os armazenará localmente.
Resumir
O exposto acima é o código de exemplo da ferramenta de código de verificação Java introduzida pelo editor. Espero que seja útil para você. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a você a tempo. Muito obrigado pelo seu apoio ao site wulin.com!