去除redis登录

master
linjj 2 years ago
parent ff45edf393
commit 55d65b073f

@ -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));
}
}

@ -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

@ -31,4 +31,6 @@ public interface Power_LogMapper {
List<Power_LogVo> selectAllByIds(@Param("checks")String checks);
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 unlockDate;
public String getUnlockDate() {
return unlockDate;
}
public void setUnlockDate(String unlockDate) {
this.unlockDate = unlockDate;
}
public Integer getLogId() {
return logId;
}

@ -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;
}

@ -28,11 +28,11 @@
<insert id="insert" parameterType="com.manage.entity.Power_Log" >
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}
)
</insert>
<insert id="insertSelective" parameterType="com.manage.entity.Power_Log" >
@ -200,6 +200,9 @@
<select id="selectAllByIds" resultMap="BaseResultMap">
select * from power_log where log_id in (${checks}) AND sys_flag = 'power'
</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 from power_log where log_id in (${str})
</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(){
Msg result=new Msg();
result.setCode(200);

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

@ -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;
}
}

Loading…
Cancel
Save