【学习笔记⑦】登录页面怎样实现验证码登录功能
2013-11-22 18:44
771 查看
用户登录时,有需要填写验证码的需求,而怎样用java代码实现的呢,以下是实现该工能的代码.
1.验证码随机生成方法,方法封装在RandomPic.java文件中,代码如下:
2.调用RandomPic对象,实现功能,写在单独的checkPic.jsp页面,代码如下:
4.在servlet中进行登录判断,代码如下:
以上步骤是实现用户验证码验证功能。
1.验证码随机生成方法,方法封装在RandomPic.java文件中,代码如下:
package com.qidian.util; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.util.Random; public class RandomPic { private final int width=60; private final int height=20; private final int interfereLineNum = 88; private final int interferePointNum = 88; private final int interfereLineLenMax = 12; private final int authenticationCodeNumber = 4; private final int backgroundColorBegin =200; private final int backgroundColorFinal =250; private final int interfereColorBegin =160; private final int interfereColorFinal =200; private final int radomNumberColorBegin =20; private final int radomNumberColorFinal =130; private final String fontName="Times New Roman"; private final int fontStyle = Font.PLAIN; private final int fontSize = 18; private final int stringWidth =13; private final int stringHight =16; private final int stringClearance =6; private final int rgbValue = 255; private Graphics graphics; public String authenticationCode=new String(); public BufferedImage image; public RandomPic(){ init(); } public RandomPic(String rn){ init(); authenticationCode = rn; } private void init(){ image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); graphics = image.getGraphics(); } public void drawServer(){ drawBasic(); drawInterfereLine(); drawRadomNumberServer(); graphics.dispose(); } public void drawClient(){ drawBasic(); drawInterfereLine(); drawRadomNumberClient(); graphics.dispose(); } private Color getRandColor(int fc,int bc){ Random random = new Random(); if(fc>rgbValue) fc=rgbValue; if(bc>rgbValue) bc=rgbValue; int r=fc+random.nextInt(bc-fc); int g=fc+random.nextInt(bc-fc); int b=fc+random.nextInt(bc-fc); return new Color(r,g,b); } private void drawBasic(){ graphics.setColor(getRandColor(backgroundColorBegin,backgroundColorFinal)); graphics.fillRect(0, 0, width, height); graphics.setFont(new Font(fontName,fontStyle,fontSize)); graphics.setColor(new Color(rgbValue,rgbValue,rgbValue)); graphics.drawRect(0,0,width-1,height-1); } private void drawInterfereLine(){ Random random = new Random(); graphics.setColor(getRandColor(interfereColorBegin,interfereColorFinal)); for (int i=0;i<interfereLineNum;i++){ int x = random.nextInt(width); int y = random.nextInt(height); int xl = random.nextInt(interfereLineLenMax); int yl = random.nextInt(interfereLineLenMax); graphics.drawLine(x,y,x+xl,y+yl); } } @SuppressWarnings("unused") private void drawInterferePoint(){ Random random = new Random(); graphics.setColor(getRandColor(interfereColorBegin,interfereColorFinal)); for (int i=0;i<interferePointNum;i++){ int x = random.nextInt(width); int y = random.nextInt(height); graphics.drawLine(x,y,x,y); } } private void drawRadomNumberServer(){ Random random = new Random(); for (int i=0;i<authenticationCodeNumber;i++){ String rand=String.valueOf(random.nextInt(10)); authenticationCode+=rand; graphics.setColor(getRandColor(radomNumberColorBegin,radomNumberColorFinal)); graphics.drawString(rand,stringWidth*i+stringClearance,stringHight); } } private void drawRadomNumberClient(){ authenticationCode = authenticationCode.substring(0,authenticationCode.indexOf(".")); switch(authenticationCode.length()){ case 1: authenticationCode = "000"+authenticationCode; break; case 2: authenticationCode = "00"+authenticationCode; break; case 3: authenticationCode = "0"+authenticationCode; break; default: authenticationCode = authenticationCode.substring(0,4); break; } graphics.setColor(getRandColor(radomNumberColorBegin,radomNumberColorFinal)); graphics.drawString(authenticationCode,stringWidth,stringHight); } }
2.调用RandomPic对象,实现功能,写在单独的checkPic.jsp页面,代码如下:
<%@ page contentType="image/jpeg" import="java.awt.image.*, javax.imageio.*, com.sias.qidian.education.util.RandomPic, java.io.*"%> <% response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); double rand = Math.random() * 10000; RandomPic rp = new RandomPic(Double.toString(rand)); rp.drawClient(); session.setAttribute("checkPic", rp.authenticationCode);//通过session传递,然后后台接受判断是否正确 BufferedImage image = rp.image; OutputStream output=response.getOutputStream(); try { ImageIO.write(image, "JPEG", output); } catch (IOException e) { e.printStackTrace(); }finally{ output.flush(); output.close(); output=null; response.flushBuffer(); out.clear(); out = pageContext.pushBody(); } %>3.在login.jsp页面编写html代码,通过input标签实现,代码如下:
<td> 验证码:<input name="checkPic" type="text" maxLength=4 size=8> <img border='0' src='<%=basePath %>commons/checkPic.jsp'/></td>
4.在servlet中进行登录判断,代码如下:
以上步骤是实现用户验证码验证功能。
相关文章推荐
- struts2第十二讲学习笔记,综合使用实现登录,页面中使用ognl表达式请求值
- Java菜鸟学习笔记--语法篇(一):用Math.random()实现验证码功能
- Java学习日记9:登录时验证码的功能以及实现
- java实现登录页面的验证码功能
- 网上图书商城项目学习笔记-004注册页面前后台的验证、注册功能实现、激活功能实现
- JDCB学习笔记 -- day05 实现一个用户的登录功能及解决SQL注入问题
- 网上图书商城项目学习笔记-007登录功能实现
- node.js学习笔记(3)-node.js结合mysql数据库实现的web项目中常见功能--登录验证、session传值、拦截器、ajax传值等
- React-Native学习笔记之:实现简单地登录页面
- ExtJS学习笔记八,复杂页面功能实现
- 学习淘淘商城第一百零三课(利用拦截器实现登录功能及订单确认页面展示)
- iOS学习笔记55- iOS项目集成ShareSDK实现第三方登录、分享、关注等功能。
- spring 3.x 学习笔记_spring mvc、spring jdbc 实现网站的登录注册功能
- JavaWeb学习记录(六)——用户登录功能之Session与验证码验证功能的实现
- Java菜鸟学习笔记(5)--用Math.random()实现验证码功能
- 【Rails学习笔记】登录和退出功能实现
- iQQ 学习笔记1 :登录、验证码、收消息
- jquery学习笔记-jquery结合showModalDialog实现子页面局部刷新父页面
- 黑马程序员_学习笔记15_asp.net之验证码实现原理初探
- Andriod学习笔记:仿美图秀秀首页手柄下拉功能实现(二)