nfdw_stand/src/com/fgkj/actions/LoginAction.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
nfdw_stand/src/com/fgkj/actions/face/FaceIdentifyAction.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
nfdw_stand/src/com/fgkj/dao/impl/User_limitImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
nfdw_stand/src/com/fgkj/dto/User_limit.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
nfdw_stand/src/com/fgkj/services/User_infService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
nfdw_stand/src/com/fgkj/actions/LoginAction.java
@@ -34,6 +34,8 @@ //private String password; private String json; private String result; private User_infService service=new User_infService(); private Vip_userService vservice=new Vip_userService(); nfdw_stand/src/com/fgkj/actions/face/FaceIdentifyAction.java
@@ -361,6 +361,9 @@ } else { ImageInfo imageInfo2 = ImageFactory.getRGBData(new File(filePath)); model = FaceIdentifyUtil.faceCompare(faceEngine, imageInfo, imageInfo2); //todo model.getCode()==0为人脸识别失败进行次数统计 /*===用户登录信息 ===*/ User_infService userInfService = new User_infService(); User_inf u = userInfService.searchByUKeyId(uKeyId); nfdw_stand/src/com/fgkj/dao/impl/User_limitImpl.java
New file @@ -0,0 +1,94 @@ package com.fgkj.dao.impl; import com.fgkj.dao.BaseDAO; import com.fgkj.dao.CallBack; import com.fgkj.dao.DAOHelper; import com.fgkj.db.DBUtil; import com.fgkj.dto.User_limit; import java.sql.ResultSet; import java.sql.SQLException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; public class User_limitImpl implements BaseDAO, CallBack { private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @Override public boolean add(Object obj) { User_limit user_limit = (User_limit) obj; String sql = "insert into db_user.tb_user_limit(userId,limitDuration,loginTime) values (?,?,?)"; Boolean bl = DAOHelper.executeUpdate(DBUtil.getConn(), sql,new Object[]{user_limit.getUserId(),15*60,DAOHelper.sdf.format(new Date())}); return bl; } @Override public boolean update(Object obj) { return false; } @Override public boolean del(Object obj) { User_limit user_limit = (User_limit) obj; String sql = "delete from db_user.tb_user_limit where userId=?"; Boolean bl = DAOHelper.executeUpdate(DBUtil.getConn(), sql,new Object[]{user_limit.getUserId()}); return bl; } @Override public List searchAll() { return null; } @Override public List serchByCondition(Object obj) { return null; } @Override public List serchByInfo(Object obj) { User_limit limit = (User_limit) obj; String sql = "select userId,limitDuration,loginTime from tb_user_limit where userId=?"; List list = DAOHelper .executeQuery(sql, DBUtil.getConn(), new Object[]{limit.getUserId()}, new CallBack() { @Override public List getResults(ResultSet rs) { List list = new ArrayList(); try { while (rs.next()){ User_limit userLimit = new User_limit(); userLimit.setId(rs.getInt("id")); userLimit.setUserId(rs.getInt("userId")); userLimit.setLimitDuration(rs.getInt("limitDuration")); userLimit.setLoginTime(rs.getTimestamp("loginTime")); list.add(userLimit); } }catch (SQLException e) { e.printStackTrace(); } return list; } } ); return list; } @Override public List getResults(ResultSet rs) { List list = new ArrayList(); try { while (rs.next()){ User_limit userLimit = new User_limit(); userLimit.setId(rs.getInt("id")); userLimit.setUserId(rs.getInt("userId")); userLimit.setLimitDuration(rs.getInt("limitDuration")); userLimit.setLoginTime(rs.getTimestamp("loginTime")); list.add(userLimit); } }catch (SQLException e) { e.printStackTrace(); } return list; } } nfdw_stand/src/com/fgkj/dto/User_limit.java
New file @@ -0,0 +1,60 @@ package com.fgkj.dto; import java.util.Date; public class User_limit { private Integer id; private Integer userId; private Date loginTime; private Integer limitDuration; public User_limit() { } public User_limit(Integer userId) { this.userId = userId; } @Override public String toString() { return "User_limit{" + "id=" + id + ", userId=" + userId + ", loginTime=" + loginTime + ", limitDuration=" + limitDuration + '}'; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Integer getUserId() { return userId; } public void setUserId(Integer userId) { this.userId = userId; } public Date getLoginTime() { return loginTime; } public void setLoginTime(Date loginTime) { this.loginTime = loginTime; } public Integer getLimitDuration() { return limitDuration; } public void setLimitDuration(Integer limitDuration) { this.limitDuration = limitDuration; } } nfdw_stand/src/com/fgkj/services/User_infService.java
@@ -13,12 +13,16 @@ import com.fgkj.dao.DAOHelper; import com.fgkj.dao.LimitNumberFactory; import com.fgkj.dao.impl.User_infImpl; import com.fgkj.dao.impl.User_limitImpl; import com.fgkj.dto.*; public class User_infService extends ActionUtil { private ServiceModel model; private User_permitgroupService upservice; private BaseDAO dao; public static int MAXLOGINFAILS_PW = 5; private int loginFails=0; public User_infService() { model = new ServiceModel(); @@ -256,6 +260,23 @@ return model; } public void limitUser(int userId){ User_limit user_limit = new User_limit(userId); List limitList = ((User_limitImpl)dao).serchByInfo(user_limit); if (limitList.size()>=1){ for (int i = 0; i < limitList.size(); i++) { User_limit limit = (User_limit) limitList.get(i); long now = new Date().getTime(); long login = limit.getLoginTime().getTime()+limit.getLimitDuration()*1000; //如果限制时间已到,先删除限制的数据 if (now>=login){ ((User_limitImpl)dao).del(limit); } } } } // 用户登录 public ServiceModel login(Object obj) { User_inf uinf = (User_inf) obj; @@ -270,6 +291,15 @@ } else { //优先判断是否用户属于密码登录类型,loginType分为密码登录-1,人脸登录-2 User_inf u = (User_inf) list.get(0); //查看此用户是否是被限制的用户 limitUser(u.getUId()); //查询前先解除可以解除的限制用户 User_limit user_limit = new User_limit(u.getUId()); List limitList2 = ((User_limitImpl)dao).serchByInfo(user_limit); if (limitList2.size()>=1){ User_limit limit = (User_limit) limitList2.get(0); model.setMsg("当前用户登录密码错误次数已达"+MAXLOGINFAILS_PW+"次,请联系管理员或等待"+limit.getLimitDuration()+"秒后解除限制"); return model; } if(u.getLoginType()!=1){ model.setMsg("当前用户登录类型为人脸登录,无法使用密码进行登录"); return model; @@ -289,6 +319,17 @@ if(flag==1){ if (!uinf.getUpassword().equals(u.getUpassword())) { System.out.println("密码错误"+uinf.getUpassword()+"=="+u.getUpassword()); //密码错误次数 loginFails++; ActionUtil.getSession().setAttribute("loginFails",loginFails); //如果密码错误次数达到5次,将锁定用户限制登录 if (loginFails==MAXLOGINFAILS_PW){ User_limit user_limit1 = new User_limit(u.getUId()); boolean bl = ((User_limitImpl)dao).add(user_limit1); if (bl){ System.out.println(u.getUName()+"用户密码错误次数达到"+MAXLOGINFAILS_PW+"次,添加到限制用户中"); } } model.setMsg(getText("Password_error")); } else { uinf.setUSnId(u.getUSnId());