`

登入验证码的使用

    博客分类:
  • j2ee
 
阅读更多

code.jsp

<%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %>
<%!
Color getRandColor(int fc,int bc){//给定范围获得随机颜色
         Random random = new Random();
         if(fc>255) fc=255;
         if(bc>255) bc=255;
         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);
         }
%>
<%
//设置页面不缓存
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);

// 在内存中创建图象
int width=80, height=30;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

// 获取图形上下文
Graphics g = image.getGraphics();

//生成随机类
Random random = new Random();

// 设定背景色
g.setColor(getRandColor(200,250));
g.fillRect(0, 0, width, height);

//设定字体
//英文
g.setFont(new Font("Times New Roman",Font.PLAIN,25));
//g.setFont(new Font("宋体", Font.BOLD, 20));


// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
g.setColor(getRandColor(160,200));
for (int i=0;i<155;i++)
{
         int x = random.nextInt(width);
         int y = random.nextInt(height);
         int xl = random.nextInt(12);
         int yl = random.nextInt(12);
         g.drawLine(x,y,x+xl,y+yl);
}

// 取随机产生的认证码(4位数字)

//英文
String codeList = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";

//String codeList ="\u7684\u4e00\u4e86\u662f\u6211\u4e0d\u5728\u4eba\u4eec\u6709\u6765\u4ed6\u8fd9\u4e0a\u7740\u4e2a\u5730\u5230\u5927\u91cc\u8bf4\u5c31\u53bb\u5b50\u5f97\u4e5f\u548c\u90a3\u8981\u4e0b\u770b\u5929\u65f6\u8fc7\u51fa\u5c0f\u4e48\u8d77\u4f60\u90fd\u628a\u597d\u8fd8\u591a\u6ca1\u4e3a\u53c8\u53ef\u5bb6\u5b66\u53ea\u4ee5\u4e3b\u4f1a\u6837\u5e74\u60f3\u751f\u540c\u8001\u4e2d\u5341\u4ece\u81ea\u9762\u524d\u5934\u9053\u5b83\u540e\u7136\u8d70\u5f88\u50cf\u89c1\u4e24\u7528\u5979\u56fd\u52a8\u8fdb\u6210\u56de\u4ec0\u8fb9\u4f5c\u5bf9\u5f00\u800c\u5df1\u4e9b\u73b0\u5c71\u6c11\u5019\u7ecf\u53d1\u5de5\u5411\u4e8b\u547d\u7ed9\u957f\u6c34\u51e0\u4e49\u4e09\u58f0\u4e8e\u9ad8\u624b\u77e5\u7406\u773c\u5fd7\u70b9\u5fc3\u6218\u4e8c\u95ee\u4f46\u8eab\u65b9\u5b9e\u5403\u505a\u53eb\u5f53\u4f4f\u542c\u9769\u6253\u5462\u771f\u5168\u624d\u56db\u5df2\u6240\u654c\u4e4b\u6700\u5149\u4ea7\u60c5\u8def\u5206\u603b\u6761\u767d\u8bdd\u4e1c\u5e2d\u6b21\u4eb2\u5982\u88ab\u82b1\u53e3\u653e\u513f\u5e38\u6c14\u4e94\u7b2c\u4f7f\u5199\u519b\u5427\u6587\u8fd0\u518d\u679c\u600e\u5b9a\u8bb8\u5feb\u660e\u884c\u56e0\u522b\u98de\u5916\u6811\u7269\u6d3b\u90e8\u95e8\u65e0\u5f80\u8239\u671b\u65b0\u5e26\u961f\u5148\u529b\u5b8c\u5374\u7ad9\u4ee3\u5458\u673a\u66f4\u4e5d\u60a8\u6bcf\u98ce\u7ea7\u8ddf\u7b11\u554a\u5b69\u4e07\u5c11\u76f4\u610f\u591c\u6bd4\u9636\u8fde\u8f66\u91cd\u4fbf\u6597\u9a6c\u54ea\u5316\u592a\u6307\u53d8\u793e\u4f3c\u58eb\u8005\u5e72\u77f3\u6ee1\u65e5\u51b3\u767e\u539f\u62ff\u7fa4\u7a76\u5404\u516d\u672c\u601d\u89e3\u7acb\u6cb3\u6751\u516b\u96be\u65e9\u8bba\u5417\u6839\u5171\u8ba9\u76f8\u7814\u4eca\u5176\u4e66\u5750\u63a5\u5e94\u5173\u4fe1\u89c9\u6b65\u53cd\u5904\u8bb0\u5c06\u5343\u627e\u4e89\u9886\u6216\u5e08\u7ed3\u5757\u8dd1\u8c01\u8349\u8d8a\u5b57\u52a0\u811a\u7d27\u7231\u7b49\u4e60\u9635\u6015\u6708\u9752\u534a\u706b\u6cd5\u9898\u5efa\u8d76\u4f4d\u5531\u6d77\u4e03\u5973\u4efb\u4ef6\u611f\u51c6\u5f20\u56e2\u5c4b\u79bb\u8272\u8138\u7247\u79d1\u5012\u775b\u5229\u4e16\u521a\u4e14\u7531\u9001\u5207\u661f\u5bfc\u665a\u8868\u591f\u6574\u8ba4\u54cd\u96ea\u6d41\u672a\u573a\u8be5\u5e76\u5e95\u6df1\u523b\u5e73\u4f1f\u5fd9\u63d0\u786e\u8fd1\u4eae\u8f7b\u8bb2\u519c\u53e4\u9ed1\u544a\u754c\u62c9\u540d\u5440\u571f\u6e05\u9633\u7167\u529e\u53f2\u6539\u5386\u8f6c\u753b\u9020\u5634\u6b64\u6cbb\u5317\u5fc5\u670d\u96e8\u7a7f\u5185\u8bc6\u9a8c\u4f20\u4e1a\u83dc\u722c\u7761\u5174\u5f62\u91cf\u54b1\u89c2\u82e6\u4f53\u4f17\u901a\u51b2\u5408\u7834\u53cb\u5ea6\u672f\u996d\u516c\u65c1\u623f\u6781\u5357\u67aa\u8bfb\u6c99\u5c81\u7ebf\u91ce\u575a\u7a7a\u6536\u7b97\u81f3\u653f\u57ce\u52b3\u843d\u94b1\u7279\u56f4\u5f1f\u80dc\u6559\u70ed\u5c55\u5305\u6b4c\u7c7b\u6e10\u5f3a\u6570\u4e61\u547c\u6027\u97f3\u7b54\u54e5\u9645\u65e7\u795e\u5ea7\u7ae0\u5e2e\u5566\u53d7\u7cfb\u4ee4\u8df3\u975e\u4f55\u725b\u53d6\u5165\u5cb8\u6562\u6389\u5ffd\u79cd\u88c5\u9876\u6025\u6797\u505c\u606f\u53e5\u533a\u8863\u822c\u62a5\u53f6\u538b\u6162\u53d4\u80cc\u7ec6";

String sRand="";


for (int i=0;i<4;i++){
  int a=random.nextInt(codeList.length()-1);
      String rand=codeList.substring(a,a+1);
      sRand+=rand;
     // 将认证码显示到图象中
     g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
     g.drawString(rand,13*i+6,20);
}

// 将认证码存入SESSION
session.setAttribute("rand",sRand);

// 图象生效
g.dispose();

// 输出图象到页面
ImageIO.write(image, "JPEG", response.getOutputStream());
out.clear();
out = pageContext.pushBody();


%>

 pigCode.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>验证pigCode</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  <script type="text/javascript">
  	function reloadcode(){
                var verify=document.getElementById('code');
                verify.setAttribute('src','code.jsp?it='+Math.random());
        }
  </script>
  <body>
	<form  name="CheckCode" action="/springMVC4/file/checkCode" method="post">
	  请输入验证码<input id="rand" name="rand" type="text">
	  验证码<img src="code.jsp" id="code" onclick="reloadcode()" style="cursor: pointer;" alt="看不清楚,换一张">
    
    <input type="submit" value="确定"/>
   </form>
  </body>
</html>

 checkCode   Action

@RequestMapping("/checkCode")
	public String checkCode(HttpServletRequest request){
			String rand=request.getParameter("rand");
			System.out.println(rand);
			System.out.println(rand.toLowerCase());
			
			HttpSession session = request.getSession(); 
			System.out.println(session.getAttribute("rand"));
			System.out.println(session.getAttribute("rand").toString().toLowerCase());
			
			if(rand.toLowerCase().equals(session.getAttribute("rand").toString().toLowerCase())){
				return "/success";
			}else{
				return "/fail";  
			}
			
		 }  

 

分享到:
评论

相关推荐

    登入验证码案例

    登入验证码案例,一个小的案例模仿出登入时候验证码的使用

    ExtJS登入验证码的实现

    5. **生成验证码**: 生成验证码通常涉及后端逻辑,但也可以在前端使用JavaScript库如`math-captcha`生成。后端生成后通过Ajax请求返回给前端,前端更新Store和验证码图片。 6. **交互与验证**: 当用户在文本框中...

    网页登入验证码

    - **提高安全性**:可以通过增加更多的干扰元素、使用更复杂的字体和颜色变化等方式提高验证码的识别难度。 - **用户体验**:考虑提供音频验证码选项,以便于视力障碍用户使用;同时确保验证码清晰易读,避免因过于...

    验证码_获取网站验证码登入_

    描述中提到的“验证码_获取网站验证码登入”可能就是指一种需要用户识别并输入图像验证码的登录过程。 在Python中,可以使用各种库来处理验证码。例如,Tesseract OCR(Optical Character Recognition)库可以用来...

    JSP 验证码DEMO

    通过分析DEMO提供的源代码,我们可以学习如何结合Java和JSP的特性来实现这一功能,例如使用`&lt;jsp:include&gt;`标签引入Servlet生成的验证码图像,以及使用`&lt;form&gt;`标签和`&lt;input&gt;`元素来获取用户输入。 验证码技术随着...

    项目管理系统后端用于管理学员项目的系统

    获取登入验证码(new 旧写法(old) 新写法(new) 刷新登入验证码 校验登入验证码 获取手机验证码(新) 登入接口(新增手机验证码登入) 手机登入 失败返回值 用户名登入 微信扫码登入(new) socket.io事件 接口 获取二维码...

    JavaScript学员项目管理系统.zip

    获取登入验证码(new) 旧写法(old) 新写法(new) 刷新登入验证码 校验登入验证码 获取手机验证码(新) 登入接口(新增手机验证码登入) 手机登入 失败返回值 用户名登入 微信扫码登入(new) socket.io事件 接口 获取二维码...

    jsp登入界面添加验证码

    在开发Web应用时,为了增加安全性,通常会在用户登录界面添加验证码功能,防止恶意自动化的登录尝试或机器人攻击。在本教程中,我们将探讨如何在JSP(Java Server Pages)中实现这一功能。 首先,我们需要了解JSP的...

    python自动登入带有验证码网站.zip

    通常需要下载验证码图片,然后使用图像处理库如`PIL`(Python Imaging Library)进行预处理,如灰度化、二值化等,使其更容易被机器识别。如果验证码复杂,可能还需要结合OCR(光学字符识别)技术,例如`pytesseract...

    .net中登入时输入的验证码源

    在.NET中,可以使用`Random`类来生成随机数字和字母,或者使用第三方库如`System.Drawing`来创建扭曲的图像验证码。 2. **存储验证码**:生成的验证码需要临时存储,以便后续验证。这通常是在服务器的会话(Session...

    验证码不能显示解决方法

    在日常的网络使用过程中,我们经常遇到需要输入验证码的情况,例如在登录网站、提交表单等操作时。但有时可能会遇到验证码无法正常显示的问题,这通常与浏览器设置、系统配置或某些特定的文件关联问题有关。本文将...

    Spring Security OAuth2集成短信验证码登录以及第三方登录

    Spring Security OAuth2集成短信验证码登录以及第三方登录 ...但是,只要我们遵循设计要求,使用拦截器来实现集成登录认证组件,我们就可以优雅地集成短信验证码登录及第三方登录,满足了所有的设计要求。

    unity c#手机短信验证码登陆注册

    发送的验证码内容代码,已写好,直接添加按钮调用即可,无需营业执照,个人可用,无需任何资质,轻松实现短信验证码功能,无需理解底层原理,全部封装好,直接调用即可,已写中文注释,使用c#代码编写,可在任何支持...

    【瑞吉外卖】SpringBoot使用邮件发送短信验证码--完善用户登录功能

    在本文中,我们将深入探讨如何使用SpringBoot框架发送邮件,特别是用于发送短信验证码以增强用户登录功能。这个示例是基于“瑞吉外卖”项目,由黑马程序员提供,通过集成SpringBoot的`spring-boot-starter-mail`依赖...

    .NET C# 页面登录验证码生成

    在Web应用的用户登录过程中,为了防止恶意自动化的机器人或者未经授权的访问,通常会使用验证码技术。验证码(CAPTCHA)是一种自动识别操作是否由人类执行的测试,通过要求用户输入图片中的文本或完成简单的图像识别...

    图形验证码

    仿12306火车站用户登入的图形验证码使用springmvc spring

    网站商城APP上的短信验证码接口文档和demo支持PHP java c#等多种语言

    3. **定时失效**:为了安全考虑,验证码通常有时间限制,如5-10分钟,过期则无效,防止恶意使用。 4. **频率限制**:防止恶意攻击,系统会设定每个电话号码在一定时间内的验证码发送次数限制。 **短信接口的技术...

    163邮箱免验证码登陆.rar

    网易旗下的163邮箱,作为国内用户量庞大的邮箱服务提供商之一,为满足用户在各种应用场景下的需求,通常会设置多层安全措施,例如手机验证码登录,以保护用户账号安全。然而,在某些特定场景下,比如批量处理邮件或...

    DWZ框架 + ThinkPHP 实现小组工作日志系统

    Quick Start: 1)安装部署: ... b)导入Mysql数据 mysql -u root -p dwz_group ... ...2)admin用户登入系统(默认密码...如果登入验证码无法显示请检查是否已经开启GD库支持【命令行输入: php -i | grep -i --color gd】

Global site tag (gtag.js) - Google Analytics