去除redis登录

master
linjj 2 years ago
parent ff45edf393
commit 55d65b073f

@ -62,166 +62,156 @@ public class LoginController {
return "loginDir/login"; return "loginDir/login";
} }
@RequestMapping(value = "login",method = RequestMethod.POST)
@RequestMapping(value = "login", method = RequestMethod.POST)
@ResponseBody @ResponseBody
public Msg login(Power_User powerUser,HttpServletResponse response, HttpServletRequest request,Model model) throws Exception { public Msg login(Power_User powerUser, HttpServletResponse response, HttpServletRequest request, Model model) throws Exception {
Jedis redis = JedisPoolUtil.getJedisPoolInstance().getResource();
String userPwd = powerUser.getUserPwd();
//判断是否在可登录时间内
Power_Log unlockDate = logService.getUnlockDate(powerUser.getUserName());
//不等于空说明账号次数过多被锁定
if (unlockDate!=null){
return Msg.failUnlockUser(unlockDate.getUnlockDate());
}
try { try {
String userPwd = powerUser.getUserPwd(); Power_UserVo user = powerUserService.findPowerUserByUserNameAndUserPwd(powerUser);
String userName = powerUser.getUserName(); //添加进操作日志
String userInfo = redis.get(userName); Power_Log log = new Power_Log();
//用来记录错误的次数 SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
String errorPwsCount = "0"; if (user != null) {
//没有这个id的话新建一个 //如处于登录状态,先清除缓存
if (userInfo == null) { //CacheManager.removeCacheByObject(user);
redis.set(userName, errorPwsCount); //记住
} MyCookieUtil.remember(request, response);
//获取已经记录错误次数 //清除用户登录错误次数缓存
int i = Integer.parseInt(redis.get(userName)); CacheManager.clearOnly(powerUser.getUserName());
//小于5可以继续登录,大于5 //存session密码置空
if (i < 5) { //是否记住密码功能
try { MyCookieUtil.remember(request, response);
Power_UserVo user = powerUserService.findPowerUserByUserNameAndUserPwd(powerUser); //设置token缓存
//添加进操作日志 String date = String.valueOf(DateUtils.getDate());
Power_Log log = new Power_Log(); String token = UUID.randomUUID().toString();
if( user != null){ ActionScopeUtils.setSessionAttribute("token", token, Integer.valueOf(String.valueOf(TOKEN_EXPIRE_TIME)) / 1000);
//如处于登录状态,先清除缓存 //设置用户登录次数缓存
//CacheManager.removeCacheByObject(user); CacheManager.addloginUserCount(fmt.format(new Date()), user.getUserName());
//记住 CacheManager.addExcCount("noExc");
MyCookieUtil.remember(request, response); List<Power_Menu> list = null;
//清除用户登录错误次数缓存 List<User_Dept_Menu> menuList = new ArrayList<>();
CacheManager.clearOnly(powerUser.getUserName()); Set<String> menus = new LinkedHashSet<>();
//存session密码置空 if (user.getRoleId().equals(0) || user.getRoleId().equals(-100)) {
//是否记住密码功能 list = powerMenuService.queryAllPowerMenu(null, user.getRoleId());
MyCookieUtil.remember(request, response); } else {
//设置token缓存 list = powerMenuService.selectUserAndRoleMenuListPower(user.getUserId(), null);
String date = String.valueOf(DateUtils.getDate()); }
String token = UUID.randomUUID().toString(); if (null != list && !list.isEmpty()) {
ActionScopeUtils.setSessionAttribute("token",token,Integer.valueOf(String.valueOf(TOKEN_EXPIRE_TIME))/1000); for (Power_Menu power_menu : list) {
//设置用户登录次数缓存 User_Dept_Menu deptMenu = new User_Dept_Menu();
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd"); String menuUrl = power_menu.getMenuUrl();
CacheManager.addloginUserCount(fmt.format(new Date()),user.getUserName()); if (StringUtils.isNotBlank(menuUrl)) {
CacheManager.addExcCount("noExc"); BeanUtils.copyProperties(power_menu, deptMenu);
List<Power_Menu> list = null; deptMenu.setMethodParent(power_menu.getParentId());
List<User_Dept_Menu> menuList = new ArrayList<>(); menuList.add(deptMenu);
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());
}
} }
} if (StringUtils.isNotBlank(power_menu.getMethod())) {
user.setMenuList(menuList); menus.add(power_menu.getMenuUrl());
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());
} }
} }
user.setRemark(power_depts.toString()); }
StringBuilder power_depts3 = new StringBuilder(); user.setMenuList(menuList);
if (user.getDeptIdQuality()!=null){ user.setMenus(menus);
List<Power_Dept> power_depts2 = power_deptService.selectByPrimaryKeys(user.getDeptIdQuality()); //设置科室
for(int a=0;a<power_depts2.size();a++){ StringBuilder power_depts = new StringBuilder();
if(a<power_depts2.size()-1){ List<Power_Dept> power_depts1 = power_deptService.selectByPrimaryKeys(user.getDeptId());
power_depts3.append(power_depts2.get(a).getDeptCode()).append(","); for (int j = 0; j < power_depts1.size(); j++) {
}else{ if (j < power_depts1.size() - 1) {
power_depts3.append(power_depts2.get(a).getDeptCode()); power_depts.append(power_depts1.get(j).getDeptName()).append(",");
} } else {
} power_depts.append(power_depts1.get(j).getDeptName());
user.setDeptIdQuality(power_depts3.toString());
} }
//设置进缓存 }
CacheManager.putCache(token,new Cache(date,user,TOKEN_EXPIRE_TIME)); user.setRemark(power_depts.toString());
ActionScopeUtils.setSessionAttribute("CURRENT_USER",user,Integer.valueOf(String.valueOf(TOKEN_EXPIRE_TIME))/1000); StringBuilder powerCodes= new StringBuilder();
String reg = "^(?![A-Za-z]+$)(?![A-Z\\d]+$)(?![A-Z\\W]+$)(?![a-z\\d]+$)(?![a-z\\W]+$)(?![\\d\\W]+$)\\S{8,20}$"; for (int c = 0; c < power_depts1.size(); c++) {
boolean msg=userPwd.matches(reg); if (c < power_depts1.size() - 1) {
redis.del(userName); powerCodes.append(power_depts1.get(c).getDeptCode()).append(",");
JedisPoolUtil.close(redis); } else {
if (msg==false){ powerCodes.append(power_depts1.get(c).getDeptCode());
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+"】次");
logService.insert(log);
request.setAttribute("msg", "用户名或密码不正确");
redis.incr(userName);
JedisPoolUtil.close(redis);
return Msg.failUser();
} }
}catch (Exception e){ user.setUserTel(powerCodes.toString());
ExceptionPrintUtil.printException(e); StringBuilder power_depts3 = new StringBuilder();
e.printStackTrace(); if (user.getDeptIdQuality() != null) {
CacheManager.addExcCount("exc"); List<Power_Dept> power_depts2 = power_deptService.selectByPrimaryKeys(user.getDeptIdQuality());
} for (int a = 0; a < power_depts2.size(); a++) {
}else { if (a < power_depts2.size() - 1) {
//失败次数大于五时锁十五分钟 power_depts3.append(power_depts2.get(a).getDeptCode()).append(",");
redis.setex(userName, 900, i + ""); } else {
JedisPoolUtil.close(redis); power_depts3.append(power_depts2.get(a).getDeptCode());
return Msg.failUser2(); }
}
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 (Exception e) {
} catch (NumberFormatException e) { ExceptionPrintUtil.printException(e);
throw new RuntimeException(e); e.printStackTrace();
}finally { CacheManager.addExcCount("exc");
JedisPoolUtil.close(redis);
} }
return null;
} }
@RequestMapping("refuse") @RequestMapping("refuse")
public String refuse(){ public String refuse() {
return "refuse"; return "refuse";
} }
//获取session所剩时间 //获取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 @ResponseBody
public String getSessionRemainingTime(HttpServletRequest request)throws Exception{ public String getSessionRemainingTime(HttpServletRequest request) throws Exception {
long lastAccessTime = 0L; long lastAccessTime = 0L;
String sessionId = request.getSession().getId(); String sessionId = request.getSession().getId();
lastAccessTime = (long)request.getSession().getAttribute(sessionId); lastAccessTime = (long) request.getSession().getAttribute(sessionId);
return JSON.toJSONString(TOKEN_EXPIRE_TIME-(System.currentTimeMillis()-lastAccessTime)); return JSON.toJSONString(TOKEN_EXPIRE_TIME - (System.currentTimeMillis() - lastAccessTime));
} }
} }

@ -1,6 +1,6 @@
# \u62E6\u622A\u83DC\u5355\u914D\u7F6E\u6587\u4EF6 ljx 2019-4-27 # \u62E6\u622A\u83DC\u5355\u914D\u7F6E\u6587\u4EF6 ljx 2019-4-27
#interceptRequest \u672A\u767B\u5F55\u4E4B\u524D\u653E\u884C\u3002\u9ED8\u8BA4\u4E3Anone #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 releaseRequest = /login,/logout,/services,/font,/refuse,/swagger-ui.html,/webjars,/swagger-resources,/v2,/methodForEmrMedical
ajaxRequest = none ajaxRequest = none
@ -13,7 +13,7 @@ TOKEN_EXPIRE_TIME = 1200000
#SERVER_PORT = 9001 #SERVER_PORT = 9001
SERVER_IP = localhost SERVER_IP = 127.0.0.1
SERVER_PORT = 8082 SERVER_PORT = 8082
#power\u6743\u9650\u7CFB\u7EDFip #power\u6743\u9650\u7CFB\u7EDFip
@ -23,7 +23,7 @@ POWER_PORT = ${SERVER_PORT}
#\u75C5\u6848\u5F52\u6863\u7CFB\u7EDFip #\u75C5\u6848\u5F52\u6863\u7CFB\u7EDFip
EMRMEDICALRECORD_IP = ${SERVER_IP} EMRMEDICALRECORD_IP = ${SERVER_IP}
#\u75C5\u6848\u5F52\u6863\u7CFB\u7EDF\u7AEF\u53E3 #\u75C5\u6848\u5F52\u6863\u7CFB\u7EDF\u7AEF\u53E3h7
EMRMEDICALRECORD_PORT = 8083 EMRMEDICALRECORD_PORT = 8083
#\u75C5\u6848\u7BA1\u7406\u7CFB\u7EDFip #\u75C5\u6848\u7BA1\u7406\u7CFB\u7EDFip

@ -31,4 +31,6 @@ public interface Power_LogMapper {
List<Power_LogVo> selectAllByIds(@Param("checks")String checks); List<Power_LogVo> selectAllByIds(@Param("checks")String checks);
void deleteLogByIds(@Param("str")String str); void deleteLogByIds(@Param("str")String str);
Power_Log getUnlockDate(@Param("userName")String userName);
} }

@ -19,6 +19,16 @@ public class Power_Log {
private String remark; private String remark;
private String unlockDate;
public String getUnlockDate() {
return unlockDate;
}
public void setUnlockDate(String unlockDate) {
this.unlockDate = unlockDate;
}
public Integer getLogId() { public Integer getLogId() {
return logId; return logId;
} }

@ -36,6 +36,18 @@ public class Power_UserVo extends Power_User {
private Integer showRecord; private Integer showRecord;
@Override
public String getDeptCode() {
return deptCode;
}
@Override
public void setDeptCode(String deptCode) {
this.deptCode = deptCode;
}
private String deptCode;
public String getDeptIdQuality() { public String getDeptIdQuality() {
return deptIdQuality; return deptIdQuality;
} }

@ -28,11 +28,11 @@
<insert id="insert" parameterType="com.manage.entity.Power_Log" > <insert id="insert" parameterType="com.manage.entity.Power_Log" >
insert into power_log (log_id, log_title, ip, insert into power_log (log_id, log_title, ip,
log_content, sys_flag, sys_id, 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}, values (#{logId,jdbcType=INTEGER}, #{logTitle,jdbcType=VARCHAR}, #{ip,jdbcType=CHAR},
#{logContent,jdbcType=VARCHAR}, #{sysFlag,jdbcType=VARCHAR}, #{sysId,jdbcType=INTEGER}, #{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}
) )
</insert> </insert>
<insert id="insertSelective" parameterType="com.manage.entity.Power_Log" > <insert id="insertSelective" parameterType="com.manage.entity.Power_Log" >
@ -200,6 +200,9 @@
<select id="selectAllByIds" resultMap="BaseResultMap"> <select id="selectAllByIds" resultMap="BaseResultMap">
select * from power_log where log_id in (${checks}) AND sys_flag = 'power' select * from power_log where log_id in (${checks}) AND sys_flag = 'power'
</select> </select>
<select id="getUnlockDate" resultType="com.manage.entity.Power_Log">
SELECT * FROM power_log where log_title='登录' and unlock_date>=sysdate() and creater=#{userName}
</select>
<delete id="deleteLogByIds"> <delete id="deleteLogByIds">
delete from power_log where log_id in (${str}) delete from power_log where log_id in (${str})
</delete> </delete>

@ -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(){ public static Msg updatePassword(){
Msg result=new Msg(); Msg result=new Msg();
result.setCode(200); result.setCode(200);

@ -18,4 +18,7 @@ public interface LogService {
int delLogsByDate(String date); int delLogsByDate(String date);
void deleteLogByIds(String str); void deleteLogByIds(String str);
Power_Log getUnlockDate(String userName);
} }

@ -84,6 +84,11 @@ public class LogServiceImpl implements LogService {
logMapper.deleteLogByIds(str); logMapper.deleteLogByIds(str);
} }
@Override
public Power_Log getUnlockDate(String userName) {
return logMapper.getUnlockDate(userName);
}
private String getAddressIp( HttpServletRequest request){ private String getAddressIp( HttpServletRequest request){
// 获取访问真实IP // 获取访问真实IP
String ipAddress = request.getHeader("x-forwarded-for"); String ipAddress = request.getHeader("x-forwarded-for");
@ -114,4 +119,5 @@ public class LogServiceImpl implements LogService {
} }
return ipAddress; return ipAddress;
} }
} }

Loading…
Cancel
Save