验证码学习

验证码学习:

第一步:写一个JSP页面VerifyCode.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"

contentType="image/jpeg"

import="java.awt.*,  java.awt.image.*,java.util.*,javax.imageio.*"%>

<%

response.setHeader("Cache-Control", "no-cache");

// 在内存中创建图象  

int width = 60, height = 20;

BufferedImage image = new BufferedImage(width, height,

BufferedImage.TYPE_INT_RGB);

//获取画笔  

Graphics g = image.getGraphics();

//设定背景色   

g.setColor(new Color(200, 200, 200));

g.fillRect(0, 0, width, height);

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

Random rnd = new Random();

int randNum = rnd.nextInt(8999) + 1000;

String randStr = String.valueOf(randNum);

//将验证码存入session   

session.setAttribute("rand", randStr);

//将验证码显示到图象中

g.setColor(Color.black);

g.setFont(new Font("", Font.PLAIN, 20));

g.drawString(randStr, 10, 17);

// 随机产生100个干扰点,使图象中的验证码不易被其他程序探测到

for (int i = 0; i < 100; i++) {

int x = rnd.nextInt(width);

int y = rnd.nextInt(height);

g.drawOval(x, y, 1, 1);

} // 输出图象到页面    

ImageIO.write(image, "JPEG", response.getOutputStream());

out.clear();

out = pageContext.pushBody();

%>

第二步:登录页面加上div块:

<div>

                  <div>验证码:

                    <input id="captcha" class="text w100" type="text" name="captcha" maxlength="4" placeholder="输入验证码" autocomplete="off"/>

                  </div>

                <div style="margin-left: 60px;">

                 <img name="imgValidate" src="VerifyCode.jsp" onclick="refresh()">

                <a href="" onclick="refresh()">看不清,换一张</a>

  </div> 

         </div>

 

第三步:登录页面加上JS,使得点击验证码时能随机换一个:

function refresh(){    

  login_main.imgValidate.src = "VerifyCode.jsp";  

 }  

第四步:验证:

<script type="text/javascript" src="${ctx}/js/jquery-1.3.js"></script>

<script type="text/javascript" src="${ctx}/js/jquery.validate.js"></script>

<script type="text/javascript">

$(function(){

$("#login_main").validate({

   //debug:true,

   onkeyup:true,//当丢失焦点的时候才触发验证请求

   //success:'ok',//成功的样式

   errorPlacement:function(error,element){//定义错误消息存放的位置

   var error_item = element.parent('div');

error_item.append(error);

   },

   rules:{

   username:{

   required:true

  },

   password:{

   required:true

  },

   captcha:{

   required:true,

   remote:{//远程验证

   url:'${ctx}/ajax.action',

   type:"post"//设置成post则不会调用缓存

   }

   }

   },

   messages: {

   username:{

   required:'<font color="red">用户名不能为空</font>'

   },

   password:{

   required:'<font color="red">密码不能为空</font>'

   },

   captcha:{

   required:'<font color="red">验证码不能为空</font>',

   remote:'<font color="red">验证码不正确</font>'

   }

   }

   });

});

</script>

第五步:写controller

/**

 * 登录

 */

@RequestMapping("/user/login2.action")

public String login2(String username,String password,HttpServletRequest request){

User user=this.userService.getName(username);

HttpSession session = request.getSession();

if(user!=null&&user.getPassword().equals(password)){

session.setAttribute("user", user.getUsername());

session.setAttribute("msg","账号密码正确!");

return "/home/fmain.jsp";

}else{

session.setAttribute("msg","<font color='red'>账号或者密码错误!</font>");

return "/index.jsp";

}

}

/**

 * 验证码ajax验证

 */

@RequestMapping("/ajax.action")

public void ajax(HttpServletRequest request, HttpServletResponse response) throws IOException {

//得到提交的验证码

String captcha = request.getParameter("captcha");

//获取session中的验证码

HttpSession session = request.getSession();

String randStr = (String)session.getAttribute("rand");

response.setCharacterEncoding("utf-8");

PrintWriter out = response.getWriter();

if(captcha.equals(randStr)){  

out.print(true);

}else{

out.print(false);

}

out.flush();

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值