|
|
|
@ -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<Power_Menu> list = null;
|
|
|
|
|
List<User_Dept_Menu> menuList = new ArrayList<>();
|
|
|
|
|
Set<String> 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<Power_Menu> list = null;
|
|
|
|
|
List<User_Dept_Menu> menuList = new ArrayList<>();
|
|
|
|
|
Set<String> 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_Dept> 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());
|
|
|
|
|
if (StringUtils.isNotBlank(power_menu.getMethod())) {
|
|
|
|
|
menus.add(power_menu.getMenuUrl());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
user.setRemark(power_depts.toString());
|
|
|
|
|
StringBuilder power_depts3 = new StringBuilder();
|
|
|
|
|
if (user.getDeptIdQuality()!=null){
|
|
|
|
|
List<Power_Dept> 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());
|
|
|
|
|
}
|
|
|
|
|
user.setMenuList(menuList);
|
|
|
|
|
user.setMenus(menus);
|
|
|
|
|
//设置科室
|
|
|
|
|
StringBuilder power_depts = new StringBuilder();
|
|
|
|
|
List<Power_Dept> 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_Dept> 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));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|