JAVA实现验证码的功能
2017-06-14 14:15
218 查看
前台页面
判断验证码的类
效果图展示
![](https://img-blog.csdn.net/20170614142444934?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSmFja1NwYXJyb3dsag==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
本文大量参考了 "程序员-形同陌路" 的博客,只做了很少修改,大家可以去看他的博客,更详细。
博客地址:http://blog.csdn.net/lulei9876/article/details/8365500/
<form action="LoginCheck" method="post"> <table> <tr><td><input name="checkCode" id="checkCode" size="8" ,maxlength="4"/></td></tr> <tr><td><img onclick="this.src='PictureCheckCode?'+new Date()" src="PictureCheckCode" alt="点击刷新验证码" width="80" height="25"/></td></tr> <tr><td align="center"><input type="submit" value="登录"></td></tr> </table> </form>
java类
package com.lj.action; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Shape; import java.awt.geom.Arc2D; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class PictureCheckCode extends HttpServlet { private static final long serialVersionUID = -3235816079841410231L; // 该方法主要作用是获得随机生成的颜色 public Color getRandColor() { Random r = new Random(); Color c = new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255)); return c; } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub this.doGet(req, resp); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置验证码的宽度和高度 int width = 160, height = 50; // 创建BufferedImage对象,想到于一张画布 BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 创建Graphics对象,相当于画笔 Graphics g = image.getGraphics(); // 创建Grapchics2D对象 Graphics2D g2d = (Graphics2D) g; Random random = new Random(); // 定义字体样式 Font mfont = new Font("楷体", Font.BOLD, 40); g.setColor(getRandColor()); // 绘制背景 g.fillRect(0, 0, width, height); // 设置字体 g.setFont(mfont); g.setColor(getRandColor()); // 绘制1条曲线作为干扰线,该线条为2f BasicStroke bs = new BasicStroke(2f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL); // 定制线条样式 Shape arc = new Arc2D.Float(10, 20, 150, 150, 40, 100, Arc2D.OPEN); g2d.setStroke(bs); g2d.draw(arc); // 输出由英文,数字,和中文随机组成的验证文字,具体的组合方式根据生成随机数确定。 String sRand = ""; String ctmp = ""; int itmp = 0; // 制定输出的验证码为四位 for (int i = 0; i < 4; i++) { switch (random.nextInt(2)) { case 1: // 生成A-Z的字母 itmp = random.nextInt(26) + 65; ctmp = String.valueOf((char) itmp); break; default: itmp = random.nextInt(10) + 48; ctmp = String.valueOf((char) itmp); break; } sRand += ctmp; Color color = new Color(20 + random.nextInt(110), 20 + random .nextInt(110), random.nextInt(110)); g.setColor(color); // 绘制文字 g.drawString(ctmp, 30 * i + 20, 35); } // 把生成的文字放到session中 HttpSession session = request.getSession(true); session.setAttribute("code", sRand); System.out.println(session.getAttribute("code")); g.dispose(); // 释放g所占用的系统资源 // 设置不缓存图片 response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "No-cache"); response.setDateHeader("Expires", 0); // 指定生成的响应图片,一定不能缺少这句话,否则错误. response.setContentType("image/jpeg"); ServletOutputStream sos = response.getOutputStream(); ImageIO.write(image, "jpeg", sos); sos.close(); } }
判断验证码的类
package com.lj.action; import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginCheck extends HttpServlet { /** * 判断验证码 */ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html; charset=UTF-8");//转码 //得到项目路径 String basePath = req.getScheme()+"://"+req.getServerName()+":"+req.getServerPort()+req.getContextPath()+"/"; String checkCode=req.getParameter("checkCode"); String sessionCode=(String)req.getSession().getAttribute("code"); PrintWriter out=resp.getWriter(); if(checkCode==null || "".equals(checkCode)){ out.write("<script>alert('请输入验证码');location.href='"+basePath+"index.jsp'</script>"); }else if(!checkCode.equalsIgnoreCase(sessionCode)){ out.write("<script>alert('验证码错误');location.href='"+basePath+"index.jsp'</script>"); }else{ out.write("<script>alert('登录成功');location.href='"+basePath+"login.jsp'</script>"); } out.flush(); out.close(); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub this.doGet(req, resp); } }
效果图展示
本文大量参考了 "程序员-形同陌路" 的博客,只做了很少修改,大家可以去看他的博客,更详细。
博客地址:http://blog.csdn.net/lulei9876/article/details/8365500/
相关文章推荐
- Java实现随机验证码功能实例
- Java实现随机验证码功能实例
- Java实现随机验证码功能实例
- Java调用WebService接口实现发送手机短信验证码功能,java 手机验证码,WebService接口调用
- Java实现发送短信验证码功能
- 使用Java程序实现随机验证码功能的实例
- Java菜鸟学习笔记--语法篇(一):用Math.random()实现验证码功能
- Java调用WebService接口实现发送手机短信验证码功能,java 手机验证码,WebService接口调用
- 【Java实现随机验证码功能实例】
- Java实现随机验证码功能实例
- Java实现随机验证码功能实例
- Java实现随机验证码功能
- Java实现随机验证码功能实例
- Java实现随机验证码功能
- 使用Java程序实现随机验证码功能的实例
- JAVA验证码功能实现(生成验证码的Servlet)
- 使用技巧:Java实现随机验证码功能实例
- Java菜鸟学习笔记(5)--用Math.random()实现验证码功能
- Java实现发送短信验证验证码功能
- Java_JSP_JSP如何实现验证码功能;