package com.manage.controller; import com.alibaba.fastjson.JSON; import com.manage.dao.Power_UserMapper; import com.manage.encrypt.Base64; import com.manage.encrypt.MD5; import com.manage.entity.*; import com.manage.service.*; import com.manage.service.cache.Cache; import com.manage.service.cache.CacheManager; import com.manage.service.webSocket.WsPool; import com.manage.util.*; import com.manage.vo.*; import org.apache.commons.lang3.StringUtils; import org.java_websocket.WebSocket; import org.jetbrains.annotations.NotNull; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import redis.clients.jedis.Jedis; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.text.SimpleDateFormat; import java.util.*; @Controller public class LoginController { @Value("${TOKEN_EXPIRE_TIME}") private long TOKEN_EXPIRE_TIME; @Value("${SERVER_IP}") private String SERVER_IP; @Value("${SERVER_PORT}") private String SERVER_PORT; @Value("${EMRRECORD_URLHEAD}") private String EMRRECOD_URLHEAD; @Autowired private Power_UserService powerUserService; @Autowired private Power_MenuService powerMenuService; @Autowired private LogService logService; @Autowired private Power_DeptService power_deptService; @Autowired LoginService loginService; @Autowired private Power_UserMapper power_userMapper; @RequestMapping(value = "login",method = RequestMethod.GET) public String toLogin(Model model ,HttpServletRequest request){ CacheManager.addExcCount("noExc"); //同一浏览器打开login,直接触发注销登录session // loginService.removeOldUserOnLogin(request); return "loginDir/login"; } @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(); 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()); } } } 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