思路:将存入session通过jsp页面中的el表达式获取,放入js进行验证。
// 注册验证
function issubmit() {
var yz = ${r_check_code};
var inputyz = document.getElementById("r_yz").value;
console.log(yz);
console.log(inputyz);
console.log(yz==inputyz);
//是否同意服务条款
if (selecta.checked) {
//验证码输入是否正确
if (yz==inputyz) {
判断表单填写是否完整
if (zcpassword.value!="" && zcpassword.value==zcpassword2.value && validate_idcard(zcid.value) && validate_username(zcname.value) && validate_password(zcpassword.value) && validate_password(zcpassword2.value)) {
return true;
} else{
document.getElementById("span1").innerHTML = "小贴士:表单不合法请修改!";
return false;
}
}else{
document.getElementById("span1").innerHTML = "小贴士:验证码错误!";
container.classList.add('right-panel-active');
return false;
}
}else{
alert('请确认是否同意服务条款,若不同意,则无法注册!');
container.classList.add('right-panel-active');
return false;
}
}
注意此处:通过el获取到html之后var格式显示为例如:var yz=abgd
;在后端生成的验证码处拼接"'"+验证码+"'"解决
后端验证
思路:获取页面输入,在servlet中将session获取,进行验证。
//验证码验证
String r_yz = "'"+request.getParameter("r_yz")+"'";
String saveCode = (String) request.getSession().getAttribute("r_check_code");//随机产生的验证码
//如果验证码正确则往下执行
System.out.println(r_yz.equals(saveCode));
if (r_yz.equals(saveCode)) {
String uid = request.getParameter("idcard");
String uname = request.getParameter("username");
String upassword = request.getParameter("password");
request.setAttribute("idcard", uid);
request.setAttribute("username", uname);
request.setAttribute("password", upassword);
User user = new User(uid, uname, upassword);
int row = new UserDaoImpl().insert(user);
request.getRequestDispatcher("RegisterAfter.jsp").forward(request, response);
} else {
//携带验证码错误信息进行反馈请求转发到登录页面
request.setAttribute("rmsg", "验证码错误!");
}
安全性:后端比前端要安全,前端在源代码中明文显示可看到验证码,通过截取可跨过验证码;而后端则将验证码在servlet中验证。


