随笔-通过session判断用户密码输入错误三次,输入验证码
@Controller
@RequestMapping("/login")
public class LoginController extends BaseController{
@Autowired
private LoginService loginService;
private static Integer ERRORCOUNT = 0; //输入的错误密码次数
private static Integer LOGINNUM = 0;
@RequestMapping(params = "login")
@ResponseBody
public AjaxJson login(HttpServletRequest request,HttpServletResponse response){
HttpSession session=request.getSession();
AjaxJson ajax=new AjaxJson();
String message="";
String username=StringEscapeUtils.escapeHtml(request.getParameter("username"));
String logincode=StringEscapeUtils.escapeHtml(request.getParameter("logincode"));
String type=StringEscapeUtils.escapeHtml(request.getParameter("type")); //是否需要输入验证码
CustomerRegtn customer=null;
if("hide".equals(type)){ //不需要验证码
}else if("show".equals(type)){ //需要输入验证码
HttpSession randCodeSession=request.getSession();
String randCode=(String) randCodeSession.getAttribute("randCode");
if(randCode !=null){ //验证码不为空
if(!randCode.equalsIgnoreCase(request.getParameter("yzmval"))){ //验证码匹配
message=AjaxJson.RANDCODEERROR;
}else{ //验证码匹配上了
if(username !=null){
customer=loginService.loadCustomer(username);
if(customer !=null){ //用户存在
if(logincode != null){
byte[] salt = PasswordUtil.getStaticSalt();
String ciphertext = PasswordUtil.encrypt(username, logincode, salt); //加密
if(ciphertext.equals(customer.getLoginpassword())){ //对比,匹配成功
customer.setLoginnum(LOGINNUM+1);
loginService.updateCustomerRegtn(customer); //登陆次数加一
message=AjaxJson.SUCCESS;
ERRORCOUNT=0;
}else{ //密码匹配不成功
if(session.getAttribute(username) != null){
ERRORCOUNT=ERRORCOUNT+1;
}else{
ERRORCOUNT=0;
}
message=AjaxJson.ERROR;
}
}
}else{
if(session.getAttribute(username) != null){
ERRORCOUNT=ERRORCOUNT+1;
}else{
ERRORCOUNT=0;
}
message=AjaxJson.ERROR;
}
}else{ //用户名为空
if(session.getAttribute(username) != null){
ERRORCOUNT=ERRORCOUNT+1;
}else{
ERRORCOUNT=0;
}
message=AjaxJson.ERROR;
}
}
}
}
session.setAttribute(username, ERRORCOUNT);//绑定session
ajax.setMsg(message);
Integer count=(Integer) session.getAttribute(username);
ajax.setErrorCount(count);
session.setMaxInactiveInterval(6000);
return ajax;
}
}
页面:
<div class="login-main">
<p>
</p>
<div class="user">
<img src="/resource/p_w_picpaths/user.png">
<input class="user-name" type="text" placeholder="请录入用户名">
</div>
<div class="code">
<img src="/resource/p_w_picpaths/code.png">
<input class="logincode" type="text" placeholder="请录入密码">
</div>
<div class="codeyzm" style="display: none">
<img src="/resource/p_w_picpaths/code.png">
<input class="yzmcode" type="text" placeholder="请录入校验码">
<img id="changeyzmid" src="/randCodeImage" />
</div>
<input class="login-btn" type="submit" value="登录">
<div class="login-bottom">
<a href="#" class="zhuce">免费注册</a>
<a href="#" class="wangji">忘记密码</a>
</div>
</div>
<script type="text/javascript">
$(".login-btn").click(function() {
var username = $(".user-name").val();
var logincode = $(".logincode").val();
var yzmval = $(".yzmcode").val();
var tzurl = "http://www.baidu.com";
if (username == '' || username.length < 0) {
alert("用户名不能为空");
return false;
} else if (logincode == '' || logincode.length < 0) {
alert("密码不能为空");
return false;
}
if ($(".yzmcode").is(":visible") == false) {
$.ajax( {
url : "/login.do?login",
data : {
'username' : username,
'logincode' : logincode,
'yzmval' : yzmval,
'type':'hide'
},
async : false,
type : "GET",
contentType : "application/json",
dataType : "json",
success : function(data) {
var d = eval(data);
var tt = 5 - d.errorCount;
if (d.msg == "success") {
window.location.href = tzurl;
} else if (d.msg == "error") {
if(tt <= 0){
alert("用户名和密码不匹配,请输入验证码");
}else{
alert("用户名和密码不匹配,还有" + tt + "机会");
}
if (d.errorCount + 1 > 5) {
$(".codeyzm").attr("style", "display:block");
}
}else if(d.msg =='randcodeerror'){
alert("验证码错误");
}
},
complete : function(XMLHttpRequest, textStatus) {
}
});
} else { //验证码显示
if (yzmval == '' || yzmval.length < 0) {
alert("验证码不能为空");
return false;
}
$.ajax( {
url : "/login.do?login",
data : {
'username' : username,
'logincode' : logincode,
'yzmval' : yzmval,
'type':'show'
},
async : false,
type : "GET",
contentType : "application/json",
dataType : "json",
success : function(data) {
var d = eval(data);
if (d.msg == "success") {
window.location.href = tzurl;
} else if (d.msg == "error") {
alert("用户名和密码不匹配");
}else if(d.msg =='randcodeerror'){
alert("验证码错误");
}
},
complete : function(XMLHttpRequest, textStatus) {
}
});
}
});
function changeyzm() {
$("#changeyzmid").attr("src", "/randCodeImage?i=" + Math.random());
}
</script>
转载于:https://blog.51cto.com/xuliangjun/1598818
随笔-通过session判断用户密码输入错误三次,输入验证码相关推荐
- python输入错误提示再次输入_Python实现用户登录并且输入错误三次后锁定该用户...
实现用户登录并且输入错误三次后锁定该用户 我的测试环境,win7,python3.5.1 提示输入用户名,和密码 判断是否被锁定 判断用户名和密码是否匹配 输入错误三次,账号被锁定 思路 代码块 na ...
- 给定一个用户,获取其密码警告期限;而后判断用户密码使用期限是否已经小于警告期限...
if 给定一个用户,获取其密码警告期限:而后判断用户密码使用期限是否已经小于警告期限: 提示:计算方法,最长使用期限减去已经使用的天数即为剩余使用期限: 如果小于,则显示"War ...
- 在ASP.NET中怎么用SESSION判断用户是否登录
代码很简单的,我把我平时写过的贴出来给大家看看: if (bResult == true) //登录的用户名和密码正确 { //保存登录的用户名 Session[&qu ...
- html怎么做密码的判断,用户密码格式判断 .html
用户密码格式判断 input { margin: 20px ; width: 300px; height: 50px; text-indent: 20px; font-size: 24px; } sp ...
- python 自动输入用户密码_Linux中Python自动输入sudo 密码
一.背景和需求 背景: 由于docker服务进程都是以root帐号的身份运行的,所以用docker跑abpred出来的文件所有者都是root, 而我作为一般用户,操作这个文件不够权限,运行代码时需要s ...
- Python 用while 实现循环 到特定条件退出循环(input 输入错误之后重新输入)
代码很简单如下: ##!/usr/bin/python3 i =0 while True:sex = input("Please input your sex (boy or girl):& ...
- 验证码输入错误怎么再次刷新验证码
利用jQuery的prop()函数获取src属性的值,向Servlet发出请求的时候加一个随机数,保证每次都是不同的请求 <script type="text/javascript&q ...
- jQuery 验证码输入错误后自动刷新验证码 点击验证码图片刷新验证码
利用jQuery的attr()函数,向Servlet发出请求的时候加一个随机数, 保证每次都是不同的请求 $('#imgVcode').attr("src","/veri ...
- python输入用户名密码、三次输入失败、退出程序_Python3练习-输入用户名输入三次错误即锁定该用户,提示登录失败...
介绍一下会用到的一些内容 Python3打开.读取和关闭文件的方法 1 file = open('D:\passwd.txt','r') #打开文件 2 content = file.readline ...
最新文章
- Spring Cache抽象-缓存注解
- 【OpenYurt 深度解析】边缘网关缓存能力的优雅实现
- 如何在Amazon AWS上设置一台Linux服务器
- hdu 2824The Euler function
- 刚刚开源的Python静态类型检查器:Pyright
- 详解分布式协调服务 ZooKeeper
- Linux链接文件包括,Linux操作系统——系统各目录有什么作用、以及文件链接过程...
- html5下input的placeholder标签兼容ie9
- 揭秘基于MBSE集成化的汽车电子解决方案
- TensorFlow model
- 计算机基础线性代数还有,大学计算机基础 word作业.doc
- linux函数 取值溢出,Linux eCryptfs工具parse_tag_3_packet()函数堆溢出漏洞
- 提交太多oracle,急!!请教 用文本域向数据库oracle提交不了太多文字如何解决??...
- SPI协议详解(图文并茂+超详细)
- MSP430单片机与SIM800A调试
- linux 搜狗拼音 自动隐藏状态栏
- 手机Vbus上防护用OVP简介
- sql注入bypass方法
- pyspark中RDD基本操作
- 疫情后北上广深租房价格跌了吗? | Alfred数据室
热门文章
- php elasticsearch ik,elasticsearch 中文分词(elasticsearch-analysis-ik)安装
- python中while嵌套循环_python中的while循环
- c语言英汉互译编程,用C语言编辑简单英汉互译词典.doc
- 申报成功后怎样修改_每日分享|电子税务局操作指引之更正错误申报
- php 为什么定义常量,php-将预定义常量定义为什么
- charles 代理手机连不上网_手机连不上网?四种方法教你如何解决,建议收藏以备不时之需...
- java retentionpolicy_Java注解之如何利用RetentionPolicy.SOURCE生存周期
- struts2漏洞监测_Apache Shiro身份验证绕过漏洞风险提示
- html广告位代码,一段CSS代码让你的广告位“立起来”
- mysql40190_MySQL 内核深度优化