java后端验证验证码,防绕过

10 篇文章 0 订阅

java后端验证验证码

1.前端

<form action="<%=contextPath %>/target/targetindex" id="form_submit" method="post">
           <input type="password" class="input input-big" name="password" id="password" placeholder="登录密码"  />
           <input type="text" class="input input-big" name="code" id="code_input" placeholder="填写右侧的验证码" />
           <input type="text" class="input input-big" name="code" id="code_input" placeholder="填写下图中验证码" />
		   <img class="verifyCode" src="<%=contextPath%>/getVerifyCode" />
           <input type="button" id="submit_button" class="button button-block bg-main text-big input-big" value="登录"> </form>    
$(".verifyCode").click(function(){
		 var timestamp = Date.parse(new Date());
		//加时间戳,防止浏览器利用缓存
		 var path = "<%=contextPath%>/getVerifyCode?"+timestamp; 
		   $('.verifyCode').attr("src",path);       
	});
	
//提交表单:
	$.ajax({
				type:"POST", 
				url:"<%=contextPath%>/user/login",
				data:{"username":username,"password":password,"code":code},
				dataType:"json",
				success:function(data){
					if(data.data == true){
						$("#form_submit").submit();
					}else{
						alert(data.msg);
						var timestamp = Date.parse(new Date());
						var path = "<%=contextPath%>/getVerifyCode?"+timestamp; 
						   $('.verifyCode').attr("src",path);    
						$("#password").val("");
					}
				}
			});

2.生成验证码接口

将生成的验证码数值放到session中。

import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.xxjf.domain.VerifyCode;

@Controller
public class VerifyCodeController {
	Log logger = LogFactory.getLog( this .getClass());   
	/* 获取验证码图片*/
	 
    @RequestMapping("/getVerifyCode")
    public void getVerificationCode(HttpServletResponse response,HttpServletRequest request) {
           try {
                   int width=200;
                   int height=69;
                   BufferedImage verifyImg=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
                   //生成对应宽高的初始图片
                   String randomText = VerifyCode.drawRandomText(width,height,verifyImg);
                   //单独的一个类方法,出于代码复用考虑,进行了封装。
                   //功能是生成验证码字符并加上噪点,干扰线,返回值为验证码字符                   
                   request.getSession().setAttribute("verifyCode", randomText);
                   response.setContentType("image/png");//必须设置响应内容类型为图片,否则前台不识别
                   OutputStream os = response.getOutputStream(); //获取文件输出流    
                   ImageIO.write(verifyImg,"png",os);//输出图片流
                   os.flush();
                   os.close();//关闭流
              } catch (IOException e) {
                   this.logger.error(e.getMessage());
                   e.printStackTrace();
              }
    }
}

3.提交表单,后代验证验证码

@ResponseBody
	@RequestMapping("login")
	public Map<String,Object> login(String username,String password,String code,HttpServletRequest request) {
		Map<String,Object> map = new HashMap<String,Object>();
		//对用户名、密码的验证码。省略
		//对验证码的验证
			if(session.getAttribute("verifyCode").toString().equalsIgnoreCase(code)) {
			map.put("data", true);
			return map;
		}
		map.put("data", false);
		map.put("msg", "验证码不正确!");
		return map;
	}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值