|
@ -3,6 +3,8 @@ package com.yihu.jw.security.core.userdetails.jdbc;
|
|
|
import com.yihu.jw.security.core.userdetails.SaltUser;
|
|
|
import com.yihu.jw.security.model.WlyyUserDetails;
|
|
|
import com.yihu.jw.security.model.WlyyUserSimple;
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
import org.apache.commons.lang.time.DateUtils;
|
|
|
import org.springframework.jdbc.core.BeanPropertyRowMapper;
|
|
|
import org.springframework.jdbc.core.support.JdbcDaoSupport;
|
|
|
import org.springframework.security.core.GrantedAuthority;
|
|
@ -54,13 +56,29 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
|
|
|
if (users.get(0).isLocked()) {
|
|
|
Date date = users.get(0).getLockedDate();
|
|
|
if (new Date().after(DateUtils.addMinutes(date, 5))) {
|
|
|
this.getJdbcTemplate().update("update base_user u set login_failure_count = 0, u.locked = 0 where u.username = ? or u.mobile = ? or u.idcard = ?", username, username, username);
|
|
|
//解除锁定
|
|
|
unlocked(username);
|
|
|
users.get(0).setLocked(false);
|
|
|
}
|
|
|
}
|
|
|
return new SaltUser(username, users.get(0).getPassword(), users.get(0).getSalt(), users.get(0).isEnabled(), users.get(0).isLocked(), getGrantedAuthorities(username));
|
|
|
}
|
|
|
|
|
|
|
|
|
public void unlocked(String username){
|
|
|
String loginType = getLogintype();
|
|
|
if(StringUtils.isBlank(loginType)||"1".equals(loginType)){ //1或默认查找user表,为平台管理员账号
|
|
|
//解除锁定
|
|
|
this.getJdbcTemplate().update("update base_user u set login_failure_count = 0, u.locked = 0 where u.username = ? or u.mobile = ? or u.idcard = ?", username, username, username);
|
|
|
}else if("2".equals(loginType)){//2.为医生账号
|
|
|
//解除锁定
|
|
|
this.getJdbcTemplate().update("update base_doctor d set d.login_failure_count = 0, d.locked = 0 where d.mobile = ? or d.idcard = ?",username, username);
|
|
|
}else if("3".equals(loginType)){ //3.患者账号
|
|
|
//解除锁定
|
|
|
this.getJdbcTemplate().update("update base_patient p set p.login_failure_count = 5, p.locked = 0 where p.mobile = ? or p.idcard = ?",username, username);
|
|
|
} //...
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 用户登录判读接口
|
|
|
* 判断loginType查找用户信息
|
|
@ -86,12 +104,6 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
|
|
|
return users;
|
|
|
}
|
|
|
|
|
|
private Collection<? extends GrantedAuthority> getGrantedAuthorities(String username) {
|
|
|
Collection<GrantedAuthority> authorities = new ArrayList<>(1);
|
|
|
authorities.add(new SimpleGrantedAuthority("ROLE_USER"));
|
|
|
return authorities;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 设置用户登录时间,返回登录信息
|
|
|
* 判断loginType,用户类型 1或默认为user,2:医生登录,3:患者登录
|
|
@ -112,17 +124,72 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
|
|
|
//获取失败次数
|
|
|
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
|
|
|
String username = request.getParameter("username");
|
|
|
Integer loginFailureCount = this.getJdbcTemplate().queryForObject("select login_failure_count from base_user u where u.username = ? or u.mobile = ? or u.idcard = ?", Integer.class, username, username, username);
|
|
|
Integer loginFailureCount = getLoginFailureCount(username);
|
|
|
loginFailureCount ++;
|
|
|
if (loginFailureCount == 5) {
|
|
|
this.getJdbcTemplate().update("update base_user u set u.login_failure_count = 5, locked = 1, u.locked_date = ? where u.username = ? or u.mobile = ? or u.idcard = ?", new Date(), username, username, username);
|
|
|
if (loginFailureCount >= 5) {
|
|
|
locked(username);
|
|
|
return "账号已被锁定,请5分钟后重试!";
|
|
|
} else {
|
|
|
this.getJdbcTemplate().update("update base_user u set u.login_failure_count = ? where u.username = ? or u.mobile = ? or u.idcard = ?", loginFailureCount, username, username, username);
|
|
|
addFailureCount(username,loginFailureCount);
|
|
|
return "密码错误,还可以再试" + (5 - loginFailureCount) + "次!";
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取失败次数
|
|
|
* @param username
|
|
|
* @return
|
|
|
*/
|
|
|
public Integer getLoginFailureCount(String username){
|
|
|
String loginType = getLogintype();
|
|
|
Integer loginFailureCount = 0;
|
|
|
if(StringUtils.isBlank(loginType)||"1".equals(loginType)){ //1或默认查找user表,为平台管理员账号
|
|
|
loginFailureCount = this.getJdbcTemplate().queryForObject("select u.login_failure_count from base_user u where u.username = ? or u.mobile = ? or u.idcard = ?", Integer.class, username, username, username);
|
|
|
}else if("2".equals(loginType)){//2.为医生账号
|
|
|
loginFailureCount = this.getJdbcTemplate().queryForObject("select d.login_failure_count from base_doctor d where d.mobile = ? or d.idcard = ?", Integer.class, username, username);
|
|
|
}else if("3".equals(loginType)){ //3.患者账号
|
|
|
loginFailureCount = this.getJdbcTemplate().queryForObject("select p.login_failure_count from base_patient p where p.mobile = ? or p.idcard = ?", Integer.class, username, username);
|
|
|
} //...
|
|
|
return loginFailureCount;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 锁定账号
|
|
|
* @param username
|
|
|
*/
|
|
|
public void locked(String username){
|
|
|
String loginType = getLogintype();
|
|
|
if(StringUtils.isBlank(loginType)||"1".equals(loginType)){ //1或默认查找user表,为平台管理员账号
|
|
|
//账号锁定
|
|
|
this.getJdbcTemplate().update("update base_user u set u.login_failure_count = 5, u.locked = 1, u.locked_date = ? where u.username = ? or u.mobile = ? or u.idcard = ?", new Date(), username, username, username);
|
|
|
}else if("2".equals(loginType)){//2.为医生账号
|
|
|
//账号锁定
|
|
|
this.getJdbcTemplate().update("update base_doctor d set d.login_failure_count = 5, d.locked = 1, d.locked_date = ? where d.mobile = ? or d.idcard = ?", new Date(), username, username);
|
|
|
}else if("3".equals(loginType)){ //3.患者账号
|
|
|
//账号锁定
|
|
|
this.getJdbcTemplate().update("update base_patient p set p.login_failure_count = 5, p.locked = 1, p.locked_date = ? where p.mobile = ? or p.idcard = ?", new Date(), username, username);
|
|
|
} //...
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 更新失败次数
|
|
|
* @param username
|
|
|
* @param loginFailureCount
|
|
|
*/
|
|
|
public void addFailureCount(String username,Integer loginFailureCount){
|
|
|
String loginType = getLogintype();
|
|
|
if(StringUtils.isBlank(loginType)||"1".equals(loginType)){ //1或默认查找user表,为平台管理员账号
|
|
|
//更新失败次数
|
|
|
this.getJdbcTemplate().update("update base_user u set u.login_failure_count = ? where u.username = ? or u.mobile = ? or u.idcard = ?", loginFailureCount, username, username, username);
|
|
|
}else if("2".equals(loginType)){//2.为医生账号
|
|
|
//更新失败次数
|
|
|
this.getJdbcTemplate().update("update base_doctor d set d.login_failure_count = ? where d.mobile = ? or d.idcard = ?", loginFailureCount, username, username);
|
|
|
}else if("3".equals(loginType)){ //3.患者账号
|
|
|
//更新失败次数
|
|
|
this.getJdbcTemplate().update("update base_patient p set p.login_failure_count = ? where p.mobile = ? or p.idcard = ?", loginFailureCount, username, username);
|
|
|
} //...
|
|
|
}
|
|
|
|
|
|
private Collection<? extends GrantedAuthority> getGrantedAuthorities(String username) {
|
|
|
Collection<GrantedAuthority> authorities = new ArrayList<>(1);
|
|
|
authorities.add(new SimpleGrantedAuthority("ROLE_USER"));
|
|
@ -149,7 +216,7 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
|
|
|
//2.为医生登录账号
|
|
|
}else if("2".equals(loginType)){
|
|
|
//更新登录时间
|
|
|
this.getJdbcTemplate().update("update base_doctor d set set d.login_failure_count = 0, d.login_date = ? where d.mobile = ? or d.idcard = ?", new Date(), username, username);
|
|
|
this.getJdbcTemplate().update("update base_doctor d set d.login_failure_count = 0, d.login_date = ? where d.mobile = ? or d.idcard = ?", new Date(), username, username);
|
|
|
users = this.getJdbcTemplate().query(DEFAULT_DOCTOR_DETAILS_STATEMENT, new BeanPropertyRowMapper(WlyyUserSimple.class), username, username);
|
|
|
//3.患者登录
|
|
|
}else if("3".equals(loginType)){
|
|
@ -169,7 +236,7 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
|
|
|
|
|
|
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
|
|
|
|
|
|
String loginType = request.getParameter("loginType");
|
|
|
String loginType = request.getParameter("login_type");
|
|
|
|
|
|
return loginType;
|
|
|
}
|