diff --git a/power-admin/src/main/java/com/manage/controller/LoginController.java b/power-admin/src/main/java/com/manage/controller/LoginController.java index 9cd4d88..70d802c 100644 --- a/power-admin/src/main/java/com/manage/controller/LoginController.java +++ b/power-admin/src/main/java/com/manage/controller/LoginController.java @@ -62,166 +62,156 @@ public class LoginController { return "loginDir/login"; } - @RequestMapping(value = "login",method = RequestMethod.POST) + + + @RequestMapping(value = "login", method = RequestMethod.POST) @ResponseBody - public Msg login(Power_User powerUser,HttpServletResponse response, HttpServletRequest request,Model model) throws Exception { - Jedis redis = JedisPoolUtil.getJedisPoolInstance().getResource(); + public Msg login(Power_User powerUser, HttpServletResponse response, HttpServletRequest request, Model model) throws Exception { + + String userPwd = powerUser.getUserPwd(); + //判断是否在可登录时间内 + Power_Log unlockDate = logService.getUnlockDate(powerUser.getUserName()); + //不等于空说明账号次数过多被锁定 + if (unlockDate!=null){ + return Msg.failUnlockUser(unlockDate.getUnlockDate()); + } try { - String userPwd = powerUser.getUserPwd(); - String userName = powerUser.getUserName(); - String userInfo = redis.get(userName); - //用来记录错误的次数 - String errorPwsCount = "0"; - //没有这个id的话新建一个 - if (userInfo == null) { - redis.set(userName, errorPwsCount); - } - //获取已经记录错误次数 - int i = Integer.parseInt(redis.get(userName)); - //小于5可以继续登录,大于5 - if (i < 5) { - try { - Power_UserVo user = powerUserService.findPowerUserByUserNameAndUserPwd(powerUser); - //添加进操作日志 - Power_Log log = new Power_Log(); - if( user != null){ - //如处于登录状态,先清除缓存 - //CacheManager.removeCacheByObject(user); - //记住 - MyCookieUtil.remember(request, response); - //清除用户登录错误次数缓存 - CacheManager.clearOnly(powerUser.getUserName()); - //存session密码置空 - //是否记住密码功能 - MyCookieUtil.remember(request, response); - //设置token缓存 - String date = String.valueOf(DateUtils.getDate()); - String token = UUID.randomUUID().toString(); - ActionScopeUtils.setSessionAttribute("token",token,Integer.valueOf(String.valueOf(TOKEN_EXPIRE_TIME))/1000); - //设置用户登录次数缓存 - SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd"); - CacheManager.addloginUserCount(fmt.format(new Date()),user.getUserName()); - CacheManager.addExcCount("noExc"); - List list = null; - List menuList = new ArrayList<>(); - Set menus = new LinkedHashSet<>(); - if (user.getRoleId().equals(0) || user.getRoleId().equals(-100)) { - list = powerMenuService.queryAllPowerMenu(null,user.getRoleId()); - } else { - list = powerMenuService.selectUserAndRoleMenuListPower(user.getUserId(),null); - } - if(null != list && !list.isEmpty()){ - for (Power_Menu power_menu : list) { - User_Dept_Menu deptMenu = new User_Dept_Menu(); - String menuUrl = power_menu.getMenuUrl(); - if (StringUtils.isNotBlank(menuUrl)) { - BeanUtils.copyProperties(power_menu, deptMenu); - deptMenu.setMethodParent(power_menu.getParentId()); - menuList.add(deptMenu); - } - if (StringUtils.isNotBlank(power_menu.getMethod())) { - menus.add(power_menu.getMenuUrl()); - } + Power_UserVo user = powerUserService.findPowerUserByUserNameAndUserPwd(powerUser); + //添加进操作日志 + Power_Log log = new Power_Log(); + SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd"); + if (user != null) { + //如处于登录状态,先清除缓存 + //CacheManager.removeCacheByObject(user); + //记住 + MyCookieUtil.remember(request, response); + //清除用户登录错误次数缓存 + CacheManager.clearOnly(powerUser.getUserName()); + //存session密码置空 + //是否记住密码功能 + MyCookieUtil.remember(request, response); + //设置token缓存 + String date = String.valueOf(DateUtils.getDate()); + String token = UUID.randomUUID().toString(); + ActionScopeUtils.setSessionAttribute("token", token, Integer.valueOf(String.valueOf(TOKEN_EXPIRE_TIME)) / 1000); + //设置用户登录次数缓存 + CacheManager.addloginUserCount(fmt.format(new Date()), user.getUserName()); + CacheManager.addExcCount("noExc"); + List list = null; + List menuList = new ArrayList<>(); + Set menus = new LinkedHashSet<>(); + if (user.getRoleId().equals(0) || user.getRoleId().equals(-100)) { + list = powerMenuService.queryAllPowerMenu(null, user.getRoleId()); + } else { + list = powerMenuService.selectUserAndRoleMenuListPower(user.getUserId(), null); + } + if (null != list && !list.isEmpty()) { + for (Power_Menu power_menu : list) { + User_Dept_Menu deptMenu = new User_Dept_Menu(); + String menuUrl = power_menu.getMenuUrl(); + if (StringUtils.isNotBlank(menuUrl)) { + BeanUtils.copyProperties(power_menu, deptMenu); + deptMenu.setMethodParent(power_menu.getParentId()); + menuList.add(deptMenu); } - } - user.setMenuList(menuList); - user.setMenus(menus); - //设置科室 - StringBuilder power_depts = new StringBuilder(); - List power_depts1 = power_deptService.selectByPrimaryKeys(user.getDeptId()); - for(int j=0;j power_depts2 = power_deptService.selectByPrimaryKeys(user.getDeptIdQuality()); - for(int a=0;a power_depts1 = power_deptService.selectByPrimaryKeys(user.getDeptId()); + for (int j = 0; j < power_depts1.size(); j++) { + if (j < power_depts1.size() - 1) { + power_depts.append(power_depts1.get(j).getDeptName()).append(","); + } else { + power_depts.append(power_depts1.get(j).getDeptName()); } - //设置进缓存 - CacheManager.putCache(token,new Cache(date,user,TOKEN_EXPIRE_TIME)); - ActionScopeUtils.setSessionAttribute("CURRENT_USER",user,Integer.valueOf(String.valueOf(TOKEN_EXPIRE_TIME))/1000); - String reg = "^(?![A-Za-z]+$)(?![A-Z\\d]+$)(?![A-Z\\W]+$)(?![a-z\\d]+$)(?![a-z\\W]+$)(?![\\d\\W]+$)\\S{8,20}$"; - boolean msg=userPwd.matches(reg); - redis.del(userName); - JedisPoolUtil.close(redis); - if (msg==false){ - String url = "http://" + SERVER_IP + ":" + SERVER_PORT +"/power"+ "/font/updatePassword"; - return Msg.success().add("url", url); - }else { - String url = "http://" + SERVER_IP + ":" + SERVER_PORT + "/power/gatewayPage"; - return Msg.success().add("url", url); - } - }else{ - //登录失败 - Integer wrongNum = 1; - Cache cache = CacheManager.getCacheInfo(powerUser.getUserName()); - if(cache != null){ - //缓存中错误次数 - Integer currentNum = (Integer)cache.getValue(); - //叠加1 - wrongNum += currentNum; + } + user.setRemark(power_depts.toString()); + StringBuilder powerCodes= new StringBuilder(); + for (int c = 0; c < power_depts1.size(); c++) { + if (c < power_depts1.size() - 1) { + powerCodes.append(power_depts1.get(c).getDeptCode()).append(","); + } else { + powerCodes.append(power_depts1.get(c).getDeptCode()); } - //先清除后添加缓存 - CacheManager.clearOnly(powerUser.getUserName()); - CacheManager.putCache(powerUser.getUserName(),new Cache(powerUser.getUserName(),wrongNum)); - log.setCreater(powerUser.getUserName()); - log.setLogTitle("登录"); - log.setLogContent("用户密码错误"); - log.setRemark("已错误【"+wrongNum+"】次"); - logService.insert(log); - request.setAttribute("msg", "用户名或密码不正确"); - redis.incr(userName); - JedisPoolUtil.close(redis); - return Msg.failUser(); } - }catch (Exception e){ - ExceptionPrintUtil.printException(e); - e.printStackTrace(); - CacheManager.addExcCount("exc"); - } - }else { - //失败次数大于五时锁十五分钟 - redis.setex(userName, 900, i + ""); - JedisPoolUtil.close(redis); - return Msg.failUser2(); + user.setUserTel(powerCodes.toString()); + StringBuilder power_depts3 = new StringBuilder(); + if (user.getDeptIdQuality() != null) { + List power_depts2 = power_deptService.selectByPrimaryKeys(user.getDeptIdQuality()); + for (int a = 0; a < power_depts2.size(); a++) { + if (a < power_depts2.size() - 1) { + power_depts3.append(power_depts2.get(a).getDeptCode()).append(","); + } else { + power_depts3.append(power_depts2.get(a).getDeptCode()); + } + } + user.setDeptIdQuality(power_depts3.toString()); + } + //设置进缓存 + CacheManager.putCache(token, new Cache(date, user, TOKEN_EXPIRE_TIME)); + ActionScopeUtils.setSessionAttribute("CURRENT_USER", user, Integer.valueOf(String.valueOf(TOKEN_EXPIRE_TIME)) / 1000); + String reg = "^(?![A-Za-z]+$)(?![A-Z\\d]+$)(?![A-Z\\W]+$)(?![a-z\\d]+$)(?![a-z\\W]+$)(?![\\d\\W]+$)\\S{8,20}$"; + boolean msg = userPwd.matches(reg); + if (msg == false) { + String url = "http://" + SERVER_IP + ":" + SERVER_PORT + "/power" + "/font/updatePassword"; + return Msg.success().add("url", url); + } else { + String url = "http://" + SERVER_IP + ":" + SERVER_PORT + "/power/gatewayPage"; + return Msg.success().add("url", url); + } + } else { + //登录失败 + Integer wrongNum = 1; + Cache cache = CacheManager.getCacheInfo(powerUser.getUserName()); + if (cache != null) { + //缓存中错误次数 + Integer currentNum = (Integer) cache.getValue(); + //叠加1 + wrongNum += currentNum; + } + //先清除后添加缓存 + CacheManager.clearOnly(powerUser.getUserName()); + CacheManager.putCache(powerUser.getUserName(), new Cache(powerUser.getUserName(), wrongNum)); + log.setCreater(powerUser.getUserName()); + log.setLogTitle("登录"); + log.setLogContent("用户密码错误"); + log.setRemark("已错误【" + wrongNum + "】次"); + //如果错误次数=5添加锁定时间 + if (wrongNum == 5) { + SimpleDateFormat UnlockFmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + log.setUnlockDate(UnlockFmt.format(new Date().getTime()+ 15*60*1000)); + } + logService.insert(log); + request.setAttribute("msg", "用户名或密码不正确"); + return Msg.failUser(); } - return null; - } catch (NumberFormatException e) { - throw new RuntimeException(e); - }finally { - JedisPoolUtil.close(redis); + } catch (Exception e) { + ExceptionPrintUtil.printException(e); + e.printStackTrace(); + CacheManager.addExcCount("exc"); } + return null; } + @RequestMapping("refuse") - public String refuse(){ + public String refuse() { return "refuse"; } - - - - - //获取session所剩时间 - @RequestMapping(value = "getSessionRemainingTime",method = RequestMethod.GET,produces = {"text/json;charset=UTF-8"}) + @RequestMapping(value = "getSessionRemainingTime", method = RequestMethod.GET, produces = {"text/json;charset=UTF-8"}) @ResponseBody - public String getSessionRemainingTime(HttpServletRequest request)throws Exception{ + public String getSessionRemainingTime(HttpServletRequest request) throws Exception { long lastAccessTime = 0L; String sessionId = request.getSession().getId(); - lastAccessTime = (long)request.getSession().getAttribute(sessionId); - return JSON.toJSONString(TOKEN_EXPIRE_TIME-(System.currentTimeMillis()-lastAccessTime)); + lastAccessTime = (long) request.getSession().getAttribute(sessionId); + return JSON.toJSONString(TOKEN_EXPIRE_TIME - (System.currentTimeMillis() - lastAccessTime)); } } diff --git a/power-admin/src/main/resources/config/config.properties b/power-admin/src/main/resources/config/config.properties index f97f9fb..d0255dd 100644 --- a/power-admin/src/main/resources/config/config.properties +++ b/power-admin/src/main/resources/config/config.properties @@ -1,6 +1,6 @@ # \u62E6\u622A\u83DC\u5355\u914D\u7F6E\u6587\u4EF6 ljx 2019-4-27 #interceptRequest \u672A\u767B\u5F55\u4E4B\u524D\u653E\u884C\u3002\u9ED8\u8BA4\u4E3Anone -#ajaxRequest ajax\u8BF7\u6C42\u6CA1\u6709\u5BF9\u5E94\u6A21\u5757\uFF0C\u9700\u8981\u653E\u884C\u3002 \u9ED8\u8BA4\u4E3Anone +#ajaxRequestajax\u8BF7\u6C42\u6CA1\u6709\u5BF9\u5E94\u6A21\u5757\uFF0C\u9700\u8981\u653E\u884C\u3002 \u9ED8\u8BA4\u4E3Anone releaseRequest = /login,/logout,/services,/font,/refuse,/swagger-ui.html,/webjars,/swagger-resources,/v2,/methodForEmrMedical ajaxRequest = none @@ -13,7 +13,7 @@ TOKEN_EXPIRE_TIME = 1200000 #SERVER_PORT = 9001 -SERVER_IP = localhost +SERVER_IP = 127.0.0.1 SERVER_PORT = 8082 #power\u6743\u9650\u7CFB\u7EDFip @@ -23,7 +23,7 @@ POWER_PORT = ${SERVER_PORT} #\u75C5\u6848\u5F52\u6863\u7CFB\u7EDFip EMRMEDICALRECORD_IP = ${SERVER_IP} -#\u75C5\u6848\u5F52\u6863\u7CFB\u7EDF\u7AEF\u53E3 +#\u75C5\u6848\u5F52\u6863\u7CFB\u7EDF\u7AEF\u53E3h7 EMRMEDICALRECORD_PORT = 8083 #\u75C5\u6848\u7BA1\u7406\u7CFB\u7EDFip diff --git a/power-dao/src/main/java/com/manage/dao/Power_LogMapper.java b/power-dao/src/main/java/com/manage/dao/Power_LogMapper.java index 6c65eda..6728a11 100644 --- a/power-dao/src/main/java/com/manage/dao/Power_LogMapper.java +++ b/power-dao/src/main/java/com/manage/dao/Power_LogMapper.java @@ -31,4 +31,6 @@ public interface Power_LogMapper { List selectAllByIds(@Param("checks")String checks); void deleteLogByIds(@Param("str")String str); + + Power_Log getUnlockDate(@Param("userName")String userName); } \ No newline at end of file diff --git a/power-dao/src/main/java/com/manage/entity/Power_Log.java b/power-dao/src/main/java/com/manage/entity/Power_Log.java index d91fc3b..a48235f 100644 --- a/power-dao/src/main/java/com/manage/entity/Power_Log.java +++ b/power-dao/src/main/java/com/manage/entity/Power_Log.java @@ -19,6 +19,16 @@ public class Power_Log { private String remark; + private String unlockDate; + + public String getUnlockDate() { + return unlockDate; + } + + public void setUnlockDate(String unlockDate) { + this.unlockDate = unlockDate; + } + public Integer getLogId() { return logId; } diff --git a/power-dao/src/main/java/com/manage/vo/Power_UserVo.java b/power-dao/src/main/java/com/manage/vo/Power_UserVo.java index 26bf1d2..db2c837 100644 --- a/power-dao/src/main/java/com/manage/vo/Power_UserVo.java +++ b/power-dao/src/main/java/com/manage/vo/Power_UserVo.java @@ -36,6 +36,18 @@ public class Power_UserVo extends Power_User { private Integer showRecord; + @Override + public String getDeptCode() { + return deptCode; + } + + @Override + public void setDeptCode(String deptCode) { + this.deptCode = deptCode; + } + + private String deptCode; + public String getDeptIdQuality() { return deptIdQuality; } diff --git a/power-dao/src/main/resources/mapper/Power_LogMapper.xml b/power-dao/src/main/resources/mapper/Power_LogMapper.xml index 080eb20..4b72c57 100644 --- a/power-dao/src/main/resources/mapper/Power_LogMapper.xml +++ b/power-dao/src/main/resources/mapper/Power_LogMapper.xml @@ -28,11 +28,11 @@ insert into power_log (log_id, log_title, ip, log_content, sys_flag, sys_id, - create_date, creater, remark + create_date, creater, remark,unlock_date ) values (#{logId,jdbcType=INTEGER}, #{logTitle,jdbcType=VARCHAR}, #{ip,jdbcType=CHAR}, #{logContent,jdbcType=VARCHAR}, #{sysFlag,jdbcType=VARCHAR}, #{sysId,jdbcType=INTEGER}, - #{createDate,jdbcType=CHAR}, #{creater,jdbcType=VARCHAR}, #{remark,jdbcType=VARCHAR} + #{createDate,jdbcType=CHAR}, #{creater,jdbcType=VARCHAR}, #{remark,jdbcType=VARCHAR},#{unlockDate,jdbcType=CHAR} ) @@ -200,6 +200,9 @@ + delete from power_log where log_id in (${str}) diff --git a/power-foundaton/src/main/java/com/manage/util/Msg.java b/power-foundaton/src/main/java/com/manage/util/Msg.java index 4ef9f91..8765ca0 100644 --- a/power-foundaton/src/main/java/com/manage/util/Msg.java +++ b/power-foundaton/src/main/java/com/manage/util/Msg.java @@ -38,6 +38,15 @@ public class Msg { + public static Msg failUnlockUser(String unlockDate){ + Msg result=new Msg(); + result.setCode(200); + result.setMsg("登录账号失败次数过多,请在"+unlockDate+"后在登录"); + return result; + } + + + public static Msg updatePassword(){ Msg result=new Msg(); result.setCode(200); diff --git a/power-service/src/main/java/com/manage/service/LogService.java b/power-service/src/main/java/com/manage/service/LogService.java index e2574ef..a3c8bbb 100644 --- a/power-service/src/main/java/com/manage/service/LogService.java +++ b/power-service/src/main/java/com/manage/service/LogService.java @@ -18,4 +18,7 @@ public interface LogService { int delLogsByDate(String date); void deleteLogByIds(String str); + + Power_Log getUnlockDate(String userName); + } diff --git a/power-service/src/main/java/com/manage/service/ipml/LogServiceImpl.java b/power-service/src/main/java/com/manage/service/ipml/LogServiceImpl.java index 7b4d675..f76e1ce 100644 --- a/power-service/src/main/java/com/manage/service/ipml/LogServiceImpl.java +++ b/power-service/src/main/java/com/manage/service/ipml/LogServiceImpl.java @@ -84,6 +84,11 @@ public class LogServiceImpl implements LogService { logMapper.deleteLogByIds(str); } + @Override + public Power_Log getUnlockDate(String userName) { + return logMapper.getUnlockDate(userName); + } + private String getAddressIp( HttpServletRequest request){ // 获取访问真实IP String ipAddress = request.getHeader("x-forwarded-for"); @@ -114,4 +119,5 @@ public class LogServiceImpl implements LogService { } return ipAddress; } + }