09.密码错误次数达到限制,账号被锁定(Spring、SpringMvc、Jpa、Shiro)。用户是否输入了错误的密码?1.2.如何记录用户密码错误的次数?1.3.如何实现账户锁定功能?首先我们获取到用户的密码错误,在登录的时候判断密码,就可以知道密码是否错误;其次,关于记录密码错误的次数,我的第一个想法是直接在登录的Controller中添加一个计数器,但是很容易反应,就是用户再次登录的时候,获取不到是否当前登录的用户是上次登录密码错误的用户,于是想到在数据库中增加一个字段记录密码错误的次数;最后,实现账户锁定,这个很简单。登录时,根据用户名查询当前用户的错误次数。如果超过2次,则直接拒绝登录并提示用户。2.代码实现:2.1。数据库操作和域添加一个字段来记录数据库中的错误数。可以自定义字段值的类型。建议不要使用高精度(没必要,没必要,不好判断),然后在对应的域中添加一个字段,可以自定义//记录错误次数的字段private整数错误号;2.2.Controller层判断用户密码错误次数。如果达到3次,则拒绝登录。//如果当前用户不为空且密码错误次数大于2if(employee!=null&&employee.getErrornum()>2){//将登录结果返回给前台为false并给出提示returnnewAjaxResult(false,"您的账号已被注册锁定,请敲打程序员解锁密码");}而如果没有达到3次,在密码错误异常的情况下,根据用户id修改密码错误次数,实现统计的功能//每次密码错误都异常,然后错误加一次,根据id修改用户密码错误次数employeeService.changeErrorTimes(employee.getId());2.3.服务层servicevoidchangeErrorTimes(Longid);serviceimpl@OverridepublicvoidchangeErrorTimes(Longid){employeeRepsitory.更改错误时间(id);}这里只是直接调整方法2.4.Repository层/***如果密码输入错误,会直接增加数据库错误数1*@paramid*/@Transactional@Modifying@Query(nativeQuery=true,value="updateemployeeesete.errornum=e.errornum+1whereid=?")voidchangeErrorTimes(Longid);需要注意的是这里一定要添加事务,否则修改操作它不会成功。习惯写原生sql语句,因为jpql需要再转换一次,感觉效率比较低。个人习惯3.结论至此,我们的密码错误计数功能就完成了,不需要额外的jar包,只是简单的操作数据库和一些判断,主要靠思路。希望我的分享能帮到你。
