whyczh
2021-06-01 b9addf0e5afb06adaefc136ac795dfed88ef9d6d
登录次数添加
2个文件已添加
3个文件已修改
200 ■■■■■ 已修改文件
nfdw_stand/src/com/fgkj/actions/LoginAction.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nfdw_stand/src/com/fgkj/actions/face/FaceIdentifyAction.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nfdw_stand/src/com/fgkj/dao/impl/User_limitImpl.java 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nfdw_stand/src/com/fgkj/dto/User_limit.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nfdw_stand/src/com/fgkj/services/User_infService.java 41 ●●●●● 补丁 | 查看 | 原始文档 | 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());