java实现验证码登录

java实现验证码的步骤:

1.创建验证码的实体类,代码如下:

  1. import java.awt.BasicStroke;
  2. import java.awt.Color;
  3. import java.awt.Font;
  4. import java.awt.Graphics2D;
  5. import java.awt.image.BufferedImage;
  6. import java.io.IOException;
  7. import java.io.OutputStream;
  8. import java.util.Random;
  9. import javax.imageio.ImageIO;
  10. public class VerifyCode {
  11. /**
  12. *楠岃瘉鐮?
  13. * @author 瑕冧匠鍗?
  14. */
  15. private int w = 50;
  16. private int h = 25;
  17. private Random r = new Random();
  18. private String[] fontNames = {"瀹嬩綋","鍗庢枃妤蜂綋","榛戜綋","寰蒋闆呴粦","妤蜂綋_GB2312"};
  19. private String codes = "23456789abcdefghjkmnpqrstuvwxyzABCEFGHIJKLMNPQRSTUVWXYZ";
  20. private Color bgColor = new Color(255,255,255);
  21. private String text;
  22. private Color randomColor(){
  23. int red = r.nextInt(200);
  24. int green = r.nextInt(200);
  25. int blue = r.nextInt(200);
  26. return new Color(red,green,blue);
  27. }
  28. private Font randomFont(){
  29. int index = r.nextInt(fontNames.length);
  30. String fontName = fontNames[index];
  31. int style = r.nextInt(4);
  32. int size = r.nextInt(6)+15;
  33. return new Font(fontName,style,size);
  34. }
  35. private void drawLine(BufferedImage image){
  36. int num = 3;
  37. Graphics2D g2 = (Graphics2D)image.getGraphics();
  38. for(int i=0;i<num;i++){
  39. int x1 = r.nextInt();
  40. int y1 = r.nextInt();
  41. int x2 = r.nextInt();
  42. int y2 = r.nextInt();
  43. g2.setStroke(new BasicStroke(1.5F));
  44. g2.setColor(Color.BLUE);
  45. g2.drawLine(x1,y1,x2,y2);
  46. }
  47. }
  48. private char randomChar(){
  49. int index = r.nextInt(codes.length());
  50. return codes.charAt(index);
  51. }
  52. private BufferedImage createImage(){
  53. BufferedImage image = new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
  54. Graphics2D g2 = (Graphics2D)image.getGraphics();
  55. g2.setColor(this.bgColor);
  56. g2.fillRect(0, 0, w, h);
  57. return image;
  58. }
  59. public BufferedImage getImage(){
  60. BufferedImage image = createImage();
  61. Graphics2D g2 = (Graphics2D)image.getGraphics();
  62. StringBuilder sb = new StringBuilder();
  63. for(int i= 0;i<4;i++){
  64. String s = randomChar()+"";
  65. sb.append(s);
  66. float x = i*1.0F*w/4;
  67. g2.setFont(randomFont());
  68. g2.setColor(randomColor());
  69. g2.drawString(s, x, h-5);
  70. }
  71. this.text = sb.toString();
  72. drawLine(image);
  73. return image;
  74. }
  75. public String getText(){
  76. return text;
  77. }
  78. public static void output (BufferedImage image,OutputStream out) throws IOException{
  79. ImageIO.write(image, "JPEG", out);
  80. }
  81. }

2.创建验证码的servlet

  1. import java.awt.image.BufferedImage;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.imageio.ImageIO;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.annotation.WebServlet;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import util.VerifyCode;
  11. @WebServlet("/VerifyCodeServlet")
  12. public class VerifyCodeServlet extends HttpServlet {
  13. /**
  14. * Servlet
  15. * @author weiqiang
  16. */
  17. public void doGet(HttpServletRequest request, HttpServletResponse response)
  18. throws ServletException, IOException {
  19. VerifyCode vc = new VerifyCode();
  20. response.setHeader("Cache-Control", "no-cache");
  21. response.setContentType("image/jpeg");
  22. BufferedImage bim = vc.getImage();
  23. ImageIO.write(bim, "JPEG", response.getOutputStream());
  24. String verifycode = vc.getText();
  25. request.getSession().setAttribute("verifyCode", verifycode);
  26. }
  27. public void doPost(HttpServletRequest request, HttpServletResponse response)
  28. throws ServletException, IOException {
  29. doGet(request, response);
  30. }
  31. public void destroy(){
  32. super.destroy();
  33. }
  34. public void init() throws ServletException{
  35. }
  36. }
  37. 3.在xml中进行配置
  38. servlet>
    <servlet-name>VerifyCodeServlet</servlet-name>
    <servlet-class>cn.com.shxt.servlet.VerifyCodeServlet</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>VerifyCodeServlet</servlet-name>
    <url-pattern>/VerifyCodeServlet</url-pattern>
    </servlet-mapping>

3.在需要使用验证码的地方使用如下代码:

[html] view plain copy

  1. <!--这是看不清刷新一下的函数-->
  2. <script>
  3. function changeVerifyCode(){
  4. document.getElementById("validateCodeImg").src="VerifyCodeServlet?t="+Math.random();
  5. }
  6. </script>
  7. <!-- 这是输入验证码的输入框-->
  8. <INPUT id=txtSN size=4 name=txtSN>
  9. <!-- 这是显示的验证码,以图片显示-->
  10. <!-- src的路劲为servlet的路劲 -->
  11. <img src="<%=basePath%>VerifyCodeServlet" border=0 id="validateCodeImg" style="height: 25px; width: 57px"/><a href="#" onclick="changeVerifyCode()">看不清?换一张</a></TD>

4.实际效果如下

String code = request.getParameter("code");
String verifyCode = (String) request.getSession().getAttribute("verifyCode");

else if(!code.equals(verifyCode)){//登陆失败
request.setAttribute("message","验证码错误");
request.getRequestDispatcher("/login.jsp").forward(request, response);

前台的code和session中的验证码进行比较,实现验证码的功能。

时间: 2024-10-27 17:47:11

java实现验证码登录的相关文章

工作笔记5.JAVA图片验证码

本文主要内容为:利用JAVA图片制作验证码. 设计思路: 1.拷贝AuthImageServlet.class图片验证码 2.配置web.xml 3.JSP中,调用封装好的AuthImageServlet,实现载入验证码的功能. 4.取出存放在Session中的验证码.在Action中推断验证码的正确性 相比較上一篇博客<工作笔记5.JAVA文本框验证码>而言,图片验证码添加了安全性. 在Action中,通过取出Session中的验证码与输入的验证码是否匹配进行推断. 步骤: 1.拷贝Auth

Java爬虫模拟登录——不给我毛概二的H某大学

你的账号访问太频繁,请一分钟之后再试! 从大一开始 就用脚本在刷课 在专业课踢的只剩下一门C#的情况下 活活刷到一周的课 大二开始教务系统多了一个非常**的操作 退课池 and 访问频繁缓冲 难道,我大三下还要去学政治课咩? 虽然学政治不如敲代码 但我想毕业啊 emmmmmm 在量子力学的角度,没有抢上毛概的我只是我本体的一个属性,和我本身没有多大关系,我还是快乐敲代码吧. 0.教务系统后台登录流程 先来看一下后台账号密码在发送给服务器之前做了什么处理 这是文中的JS代码 1 j$(docume

Spring Security 实现手机验证码登录

思路:参考用户名密码登录过滤器链,重写认证和授权 示例如下(该篇示例以精简为主,演示主要实现功能,全面完整版会在以后的博文中发出): 由于涉及内容较多,建议先复制到本地工程中,然后在细细研究. 1.   新建Maven项目  sms-code-validate 2.   pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchem

java生成验证码

一:需求分析 使用java生成验证码: 1:生成画布,画好背景图 2:画随机数 3:画干扰线 4:将内存中的图片保存到硬盘上 二:代码如下 1 /** 2 * 3 */ 4 package com.hlcui.io; 5 6 import java.awt.Color; 7 import java.awt.Font; 8 import java.awt.Graphics; 9 import java.awt.image.BufferedImage; 10 import java.io.File;

java登陆验证码与JS无刷新验证

最近公司的项目的登陆模块由我负责,所以就做了个登陆小功能进行练手,其包括了用jQuery对用户名和密码进行不为null验证,和出于安全性考虑加了一个验证码的校验 别的不说先上代码 controller层 CreateImage.java package com.controller; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage;

JAVA CAS单点登录之三:CAS代理模式演练

前言 JAVA CAS单点登录之一:搭建CAS服务器 JAVA CAS单点登录之二:CAS普通模式1演练 代理模式相相对上一节的普通模式,更加复杂了.但配置起来也会稍微有些差别.所谓难者不会,会者不难.如果遇到一个从来没有遇到的问题,解决起来也是非常棘手的,当然解决之后就不是事了.我就遇到了一个CAS 坑爹的错误.一步步按照别人的博客坐下来,普通模式部署没有多大问题,就是不知道为什么代理模式总是出错,搜遍了整个网络,也没找到问题所在,我就纳闷了,为什么就没有人 遇到过呢.还好,最后我使用了杀手锏

java commons HttpClient登录oschina

原文:java commons HttpClient登录oschina 代码下载地址:http://www.zuidaima.com/share/1550463226612736.htm 谁能帮忙提供完整的类似osc上这个哥们的代码呢?急急急.http://www.oschina.net/code/snippet_580223_12341 运行结果,基本和你的需求达成一致,感谢投递者 由Wood编辑于2013-12-19 8:36:37 java commons HttpClient登录osch

java识别验证码

所需资源下载链接(资源免费,重在分享) Tesseract:http://download.csdn.net/detail/chenyangqi/9190667 jai_imageio-1.1-alpha,swingx-1.0:http://download.csdn.net/detail/chenyangqi/9190683 HttpWatch Professional:http://download.csdn.net/detail/chenyangqi/9208339 项目简介: 我们学校使

Linux使用ssh动态验证码登录机器

ssh动态验证码登录机器 Google Authenticator是一个动态验证码程序,兼容各种智能手机平板设备,可以用来做各种帐号的二次验证,增加帐号的安全性.SSH是Linux系统的最重要防线之一,为了防止密码泄露或者被爆破,可以使用Google Authenticator来做二次验证,使用方法也很简单 谷歌身份验证器生成的是动态验证码,默认30秒更新.修改配置,SSH登录必须在输入密码之前输入动态验证码.即使账号和密码泄露,验证码输入错误,仍然无法登录.苹果或者安卓手机端可以安装身份验证器