Commit e085ac44 by 宋振民

feat:系统安全功能完善

parent 75dd53d1
......@@ -88,6 +88,17 @@ public class UserController {
return Result.error();
}
@PostMapping("unlock")
@Token
@ApiOperation("解锁用户")
public Object unlockUser(@RequestBody UserReq.UnlockUserReq user) throws Exception {
boolean result = userService.unlockUser(user);
if (result)
return Result.success(null);
else
return Result.error();
}
@PostMapping("update")
@Token
@ApiOperation("修改用户")
......
......@@ -33,10 +33,14 @@ public class SysUser {
private Date lastTime;
private Date lastUpdatePwdTime;
private String lastIp;
private boolean isAdmin;
private boolean lockFlag;
public Integer getId() {
return id;
}
......@@ -164,4 +168,20 @@ public class SysUser {
public void setIsAdmin(boolean isAdmin) {
this.isAdmin = isAdmin;
}
public Date getLastUpdatePwdTime() {
return lastUpdatePwdTime;
}
public void setLastUpdatePwdTime(Date lastUpdatePwdTime) {
this.lastUpdatePwdTime = lastUpdatePwdTime;
}
public boolean getLockFlag() {
return lockFlag;
}
public void setLockFlag(boolean lockFlag) {
this.lockFlag = lockFlag;
}
}
\ No newline at end of file
......@@ -165,6 +165,27 @@ public class UserReq {
}
}
public static class UnlockUserReq {
@ApiModelProperty(value = "用户ID", required = true)
@NotNull(message = "用户ID 参数必传")
private Integer userId;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
@Override
public String toString() {
return "UnlockReq{" +
"userId=" + userId +
'}';
}
}
public static class UpdateUserReq {
@ApiModelProperty(value = "用户ID", required = true)
@NotNull(message = "用户ID 参数必传")
......
......@@ -17,6 +17,8 @@ public interface UserService {
boolean deleteUser(UserReq.DeleteUserReq user);
boolean unlockUser(UserReq.UnlockUserReq user);
boolean updateUser(UpdateUserReq user);
List<SysUserList> getAll(UserReq.GetUserReq user);
......
......@@ -54,6 +54,7 @@ public class UserServiceImpl implements UserService {
sysUser.setMobile(user.getMobile());
sysUser.setSex(user.getSex());
sysUser.setCreateDate(new Date());
sysUser.setLastUpdatePwdTime(new Date());
sysUser.setCreateUserid(userId);
sysUser.setState((short) StateType.ON.getValue());
sysUser.setIsAdmin(user.getIsAdmin());
......@@ -84,6 +85,19 @@ public class UserServiceImpl implements UserService {
}
@Override
public boolean unlockUser(UserReq.UnlockUserReq user) {
if (user != null) {
SysUser sysUser = sysUserMapper.selectByPrimaryKey(user.getUserId());
if (sysUser != null) {
sysUser.setLockFlag(false);
sysUserMapper.updateByPrimaryKey(sysUser);
return true;
}
}
return false;
}
@Override
@Transactional(rollbackFor = Exception.class)
public boolean updateUser(UpdateUserReq user) {
if (user != null) {
......
......@@ -18,6 +18,7 @@
<result column="LAST_TIME" jdbcType="TIMESTAMP" property="lastTime"/>
<result column="LAST_IP" jdbcType="VARCHAR" property="lastIp"/>
<result column="IS_ADMIN" jdbcType="BOOLEAN" property="isAdmin"/>
<result column="LOCK_FLAG" jdbcType="BOOLEAN" property="lockFlag"/>
</resultMap>
<resultMap id="SysUserList" extends="BaseResultMap" type="com.hs.admin.model.respmodel.SysUserList">
<result column="ROLE_ID" jdbcType="INTEGER" property="roleId"/>
......@@ -61,7 +62,8 @@
ERROR_TIME = #{errorTime,jdbcType=TIMESTAMP},
LAST_TIME = #{lastTime,jdbcType=TIMESTAMP},
LAST_IP = #{lastIp,jdbcType=VARCHAR},
IS_ADMIN = #{isAdmin,jdbcType=VARCHAR}
IS_ADMIN = #{isAdmin,jdbcType=VARCHAR},
LOCK_FLAG = #{lockFlag,jdbcType=VARCHAR}
where ID = #{id,jdbcType=INTEGER}
</update>
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
......
......@@ -8,18 +8,19 @@ import java.util.Map;
public enum SysConfigKeyType {
MAC_ADDRESS_RANGE("MAC_ADDRESS_RANGE","MAC地址范围过滤"),
MAC_BINDING("MAC_BINDING","MAC地址绑定");
MAC_BINDING("MAC_BINDING","MAC地址绑定"),
PWD_TIME_LIMIT("PWD_TIME_LIMIT","密码有效期");
private String value;
private String code;
private String desc;
SysConfigKeyType(String value, String desc) {
this.value = value;
SysConfigKeyType(String code, String desc) {
this.code = code;
this.desc = desc;
}
public String getValue() {
return value;
public String getCode() {
return code;
}
public String getDesc() {
......@@ -31,7 +32,7 @@ public enum SysConfigKeyType {
for(SysConfigKeyType projectType : values()){
Map<String,Object> map = new HashMap<String,Object>() {
{
put("value",projectType.getValue());
put("code",projectType.getCode());
put("description",projectType.getDesc());
}
};
......
package com.hs.api.common.utils;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import org.apache.commons.lang3.time.DateFormatUtils;
public class DateUtils {
/**
* 仅显示年月日,例如 2015-08-11.
*/
public static final String DATE_FORMAT = "yyyy-MM-dd";
/**
* 显示年月日时分秒,例如 2015-08-11 09:51:53.
*/
public static final String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
/**
* 仅显示时分秒,例如 09:51:53.
*/
public static final String TIME_FORMAT = "HH:mm:ss";
/**
* 每天的毫秒数 8640000.
*/
public static final long MILLISECONDS_PER_DAY = 86400000L;
/**
* 每周的天数.
*/
public static final long DAYS_PER_WEEK = 7L;
/**
* 每小时毫秒数.
*/
public static final long MILLISECONDS_PER_HOUR = 3600000L;
/**
* 每分钟秒数.
*/
public static final long SECONDS_PER_MINUTE = 60L;
/**
* 每小时秒数.
*/
public static final long SECONDS_PER_HOUR = 3600L;
/**
* 每天秒数.
*/
public static final long SECONDS_PER_DAY = 86400L;
/**
* 每个月秒数,默认每月30天.
*/
public static final long SECONDS_PER_MONTH = 2592000L;
/**
* 每年秒数,默认每年365天.
*/
public static final long SECONDS_PER_YEAR = 31536000L;
/**
* 常用的时间格式.
*/
private static String[] parsePatterns = { "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy/MM/dd",
"yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm" };
/**
* 得到当前日期字符串.
* @return String 日期字符串,例如2015-08-11
* @since 1.0
*/
public static String getDate() {
return getDate(DateUtils.DATE_FORMAT);
}
/**
* 得到当前时间字符串.
* @return String 时间字符串,例如 09:51:53
* @since 1.0
*/
public static String getTime() {
return formatDate(new Date(), DateUtils.TIME_FORMAT);
}
/**
* 得到当前日期和时间字符串.
* @return String 日期和时间字符串,例如 2015-08-11 09:51:53
* @since 1.0
*/
public static String getDateTime() {
return formatDate(new Date(), DateUtils.DATETIME_FORMAT);
}
/**
* 获取当前时间指定格式下的字符串.
* @param pattern
* 转化后时间展示的格式,例如"yyyy-MM-dd","yyyy-MM-dd HH:mm:ss"等
* @return String 格式转换之后的时间字符串.
* @since 1.0
*/
public static String getDate(String pattern) {
return DateFormatUtils.format(new Date(), pattern);
}
/**
* 获取指定日期的字符串格式.
* @param date 需要格式化的时间,不能为空
* @param pattern 时间格式,例如"yyyy-MM-dd","yyyy-MM-dd HH:mm:ss"等
* @return String 格式转换之后的时间字符串.
* @since 1.0
*/
public static String getDate(Date date, String pattern) {
return DateFormatUtils.format(date, pattern);
}
/**
* 获取日期时间字符串,默认格式为(yyyy-MM-dd).
* @param date 需要转化的日期时间
* @param pattern 时间格式,例如"yyyy-MM-dd" "HH:mm:ss" "E"等
* @return String 格式转换后的时间字符串
* @since 1.0
*/
public static String formatDate(Date date, Object... pattern) {
String formatDate = null;
if (pattern != null && pattern.length > 0) {
formatDate = DateFormatUtils.format(date, pattern[0].toString());
} else {
formatDate = DateFormatUtils.format(date, DateUtils.DATE_FORMAT);
}
return formatDate;
}
/**
* 获取当前年份字符串.
* @return String 当前年份字符串,例如 2015
* @since 1.0
*/
public static String getYear() {
return formatDate(new Date(), "yyyy");
}
/**
* 获取当前月份字符串.
* @return String 当前月份字符串,例如 08
* @since 1.0
*/
public static String getMonth() {
return formatDate(new Date(), "MM");
}
/**
* 获取当前天数字符串.
* @return String 当前天数字符串,例如 11
* @since 1.0
*/
public static String getDay() {
return formatDate(new Date(), "dd");
}
/**
* 获取当前星期字符串.
* @return String 当前星期字符串,例如星期二
* @since 1.0
*/
public static String getWeek() {
return formatDate(new Date(), "E");
}
/**
* 将日期型字符串转换为日期格式.
* 支持的日期字符串格式包括"yyyy-MM-dd","yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm",
* "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm"
* @param str
* @return Date
* @since 1.0
*/
public static Date parseDate(Object str) {
if (str == null) {
return null;
}
try {
return org.apache.commons.lang3.time.DateUtils.parseDate(str.toString(), parsePatterns);
} catch (ParseException e) {
return null;
}
}
/**
* 获取当前日期与指定日期相隔的天数.
* @param date 给定的日期
* @return long 日期间隔天数,正数表示给定日期在当前日期之前,负数表示在当前日期之后
* @since 1.0
*/
public static long pastDays(Date date) {
// 将指定日期转换为yyyy-MM-dd格式
date = DateUtils.parseDate(DateUtils.formatDate(date, DateUtils.DATE_FORMAT));
// 当前日期转换为yyyy-MM-dd格式
Date currentDate = DateUtils.parseDate(DateUtils.formatDate(new Date(), DateUtils.DATE_FORMAT));
long t=0;
if(date!=null&&currentDate!=null){
t = (currentDate.getTime() - date.getTime()) / DateUtils.MILLISECONDS_PER_DAY;
}
return t;
}
/**
* 获取当前日期指定天数之后的日期.
* @param num 相隔天数
* @return Date 日期
* @since 1.0
*/
public static Date nextDay(int num) {
Calendar curr = Calendar.getInstance();
curr.set(Calendar.DAY_OF_MONTH, curr.get(Calendar.DAY_OF_MONTH) + num);
return curr.getTime();
}
/**
* 获取当前日期指定月数之后的日期.
* @param num 间隔月数
* @return Date 日期
* @since 1.0
*/
public static Date nextMonth(int num) {
Calendar curr = Calendar.getInstance();
curr.set(Calendar.MONTH, curr.get(Calendar.MONTH) + num);
return curr.getTime();
}
/**
* 获取当前日期指定年数之后的日期.
* @param num 间隔年数
* @return Date 日期
* @since 1.0
*/
public static Date nextYear(int num) {
Calendar curr = Calendar.getInstance();
curr.set(Calendar.YEAR, curr.get(Calendar.YEAR) + num);
return curr.getTime();
}
/**
* 将 Date 日期转化为 Calendar 类型日期.
* @param date 给定的时间,若为null,则默认为当前时间
* @return Calendar Calendar对象
* @since 1.0
*/
public static Calendar getCalendar(Date date) {
Calendar calendar = Calendar.getInstance();
// calendar.setFirstDayOfWeek(Calendar.SUNDAY);//每周从周日开始
// calendar.setMinimalDaysInFirstWeek(1); // 设置每周最少为1天
if (date != null) {
calendar.setTime(date);
}
return calendar;
}
/**
* 计算两个日期之间相差天数.
* @param start 计算开始日期
* @param end 计算结束日期
* @return long 相隔天数
* @since 1.0
*/
public static long getDaysBetween(Date start, Date end) {
// 将指定日期转换为yyyy-MM-dd格式
start = DateUtils.parseDate(DateUtils.formatDate(start, DateUtils.DATE_FORMAT));
// 当前日期转换为yyyy-MM-dd格式
end = DateUtils.parseDate(DateUtils.formatDate(end, DateUtils.DATE_FORMAT));
long diff=0;
if(start!=null&&end!=null) {
diff = (end.getTime() - start.getTime()) / DateUtils.MILLISECONDS_PER_DAY;
}
return diff;
}
/**
* 计算两个日期之前相隔多少周.
* @param start 计算开始时间
* @param end 计算结束时间
* @return long 相隔周数,向下取整
* @since 1.0
*/
public static long getWeeksBetween(Date start, Date end) {
return getDaysBetween(start, end) / DateUtils.DAYS_PER_WEEK;
}
/**
* 获取与指定日期间隔给定天数的日期.
* @param specifiedDay 给定的字符串格式日期,支持的日期字符串格式包括"yyyy-MM-dd","yyyy-MM-dd HH:mm:ss",
* "yyyy-MM-dd HH:mm", "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss",
* "yyyy/MM/dd HH:mm"
* @param num 间隔天数
* @return String 间隔指定天数之后的日期
* @since 1.0
*/
public static String getSpecifiedDayAfter(String specifiedDay, int num) {
Date specifiedDate = parseDate(specifiedDay);
Calendar c = Calendar.getInstance();
c.setTime(specifiedDate);
int day = c.get(Calendar.DATE);
c.set(Calendar.DATE, day + num);
String dayAfter = formatDate(c.getTime(), DateUtils.DATE_FORMAT);
return dayAfter;
}
/**
* 计算两个日期之前间隔的小时数.
*
* @param date1
* 结束时间
* @param date2
* 开始时间
* @return String 相差的小时数,保留一位小数
* @since 1.0
*/
public static String dateMinus(Date date1, Date date2) {
if (date1 == null || date2 == null) {
return "0";
}
Long r = date1.getTime() - date2.getTime();
DecimalFormat df = new DecimalFormat("#.0");
double result = r * 1.0 / DateUtils.MILLISECONDS_PER_HOUR;
return df.format(result);
}
/**
* 获取当前季度 .
*
* @return Integer 当前季度数
* @since 1.0
*/
public static Integer getCurrentSeason() {
Calendar calendar = Calendar.getInstance();
Integer month = calendar.get(Calendar.MONTH) + 1;
int season = 0;
if (month >= 1 && month <= 3) {
season = 1;
} else if (month >= 4 && month <= 6) {
season = 2;
} else if (month >= 7 && month <= 9) {
season = 3;
} else if (month >= 10 && month <= 12) {
season = 4;
}
return season;
}
/**
* 将以秒为单位的时间转换为其他单位.
*
* @param seconds
* 秒数
* @return String 例如 16分钟前、2小时前、3天前、4月前、5年前等
* @since 1.0
*/
public static String getIntervalBySeconds(long seconds) {
StringBuffer buffer = new StringBuffer();
if (seconds < SECONDS_PER_MINUTE) {
buffer.append(seconds).append("秒前");
} else if (seconds < SECONDS_PER_HOUR) {
buffer.append(seconds / SECONDS_PER_MINUTE).append("分钟前");
} else if (seconds < SECONDS_PER_DAY) {
buffer.append(seconds / SECONDS_PER_HOUR).append("小时前");
} else if (seconds < SECONDS_PER_MONTH) {
buffer.append(seconds / SECONDS_PER_DAY).append("天前");
} else if (seconds < SECONDS_PER_YEAR) {
buffer.append(seconds / SECONDS_PER_MONTH).append("月前");
} else {
buffer.append(seconds / DateUtils.SECONDS_PER_YEAR).append("年前");
}
return buffer.toString();
}
/**
*
* getNowTimeBefore(记录时间相当于目前多久之前)
*
* @param seconds
* 秒
* @return
* @exception @since
* 1.0
* @author rlliu
*/
public static String getNowTimeBefore(long seconds) {
StringBuffer buffer = new StringBuffer();
buffer.append("上传于");
if (seconds < 3600) {
buffer.append((long) Math.floor(seconds / 60.0)).append("分钟前");
} else if (seconds < 86400) {
buffer.append((long) Math.floor(seconds / 3600.0)).append("小时前");
} else if (seconds < 604800) {
buffer.append((long) Math.floor(seconds / 86400.0)).append("天前");
} else if (seconds < 2592000) {
buffer.append((long) Math.floor(seconds / 604800.0)).append("周前");
} else if (seconds < 31104000) {
buffer.append((long) Math.floor(seconds / 2592000.0)).append("月前");
} else {
buffer.append((long) Math.floor(seconds / 31104000.0)).append("年前");
}
return buffer.toString();
}
/**
*
* getMonthsBetween(查询两个日期相隔的月份)
*
* @param startDate 开始日期1 (格式yyyy-MM-dd)
* @param endDate 截止日期2 (格式yyyy-MM-dd)
* @return
*/
public static int getMonthsBetween(String startDate, String endDate) {
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c1.setTime(DateUtils.parseDate(startDate));
c2.setTime(DateUtils.parseDate(endDate));
int year = c2.get(Calendar.YEAR) - c1.get(Calendar.YEAR);
int month = c2.get(Calendar.MONTH) - c1.get(Calendar.MONTH);
return Math.abs(year * 12 + month);
}
/**
*
* getDayOfWeek(获取当前日期是星期几)
*
* @param dateStr 日期
* @return 星期几
*/
public static String getDayOfWeek(String dateStr) {
String[] weekOfDays = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
Date date = parseDate(dateStr);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int num = calendar.get(Calendar.DAY_OF_WEEK) - 1;
return weekOfDays[num];
}
/**
* sns 格式 如几秒前,几分钟前,几小时前,几天前,几个月前,几年后, ... 精细,类如某个明星几秒钟之前发表了一篇微博
*
* @param createTime
* @return
*/
public static String snsFormat(long createTime) {
long now = System.currentTimeMillis() / 1000;
long differ = now - createTime / 1000;
String dateStr = "";
if (differ <= 60) {
dateStr = "刚刚";
} else if (differ <= 3600) {
dateStr = (differ / 60) + "分钟前";
} else if (differ <= 3600 * 24) {
dateStr = (differ / 3600) + "小时前";
} else if (differ <= 3600 * 24 * 30) {
dateStr = (differ / (3600 * 24)) + "天前";
} else {
Date date = new Date(createTime);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
dateStr = sdf.format(date);
}
return dateStr;
}
/**
* 得到UTC时间,类型为字符串,格式为"yyyy-MM-dd HH:mm"
* 如果获取失败,返回null
* @return
*/
public static String getUTCTimeStr() {
StringBuffer UTCTimeBuffer = new StringBuffer();
// 1、取得本地时间:
Calendar cal = Calendar.getInstance() ;
// 2、取得时间偏移量:
int zoneOffset = cal.get(java.util.Calendar.ZONE_OFFSET);
// 3、取得夏令时差:
int dstOffset = cal.get(java.util.Calendar.DST_OFFSET);
// 4、从本地时间里扣除这些差量,即可以取得UTC时间:
cal.add(java.util.Calendar.MILLISECOND, -(zoneOffset + dstOffset));
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH)+1;
int day = cal.get(Calendar.DAY_OF_MONTH);
int hour = cal.get(Calendar.HOUR_OF_DAY);
int minute = cal.get(Calendar.MINUTE);
UTCTimeBuffer.append(year).append("-").append(month).append("-").append(day) ;
UTCTimeBuffer.append(" ").append(hour).append(":").append(minute) ;
try{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
sdf.parse(UTCTimeBuffer.toString()) ;
return UTCTimeBuffer.toString() ;
}catch(ParseException e)
{
e.printStackTrace() ;
}
return null ;
}
}
\ No newline at end of file
......@@ -7,6 +7,6 @@ import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
public interface SysLoginConfigMapper {
public interface SysConfigMapper {
List<SysConfig> selectByKey(String key);
}
\ No newline at end of file
......@@ -29,12 +29,16 @@ public class SysUser {
private Date errorTime;
private Date lastUpdatePwdTime;
private Date lastTime;
private String lastIp;
private String macAddress;
private boolean lockFlag;
public Long getId() {
return id;
}
......@@ -162,4 +166,24 @@ public class SysUser {
public void setMacAddress(String macAddress) {
this.macAddress = macAddress;
}
public Date getLastUpdatePwdTime() {
return lastUpdatePwdTime;
}
public void setLastUpdatePwdTime(Date lastUpdatePwdTime) {
this.lastUpdatePwdTime = lastUpdatePwdTime;
}
public boolean isLockFlag() {
return lockFlag;
}
public void setLockFlag(boolean lockFlag) {
this.lockFlag = lockFlag;
}
public void addErrorCount() {
this.errorCount = this.errorCount == null ? 1 : this.errorCount + 1;
}
}
\ No newline at end of file
package com.hs.api.service.Impl;
import com.hs.api.common.enums.SysConfigKeyType;
import com.hs.api.common.exceptions.DBConfigurationError;
import com.hs.api.common.utils.DateUtils;
import com.hs.api.common.utils.TokenUtil;
import com.hs.api.mapper.DicOrgMapper;
import com.hs.api.mapper.SysRoleMapper;
......@@ -9,7 +11,9 @@ import com.hs.api.mapper.SysVersionMapper;
import com.hs.api.model.*;
import com.hs.api.model.respmodel.LoginInfo;
import com.hs.api.service.LoginService;
import com.hs.api.service.SysConfigService;
import com.hs.api.service.UserService;
import com.hs.common.utils.RedisUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -24,6 +28,9 @@ public class LoginServiceImpl implements LoginService {
@Autowired
private UserService userServiceImpl;
@Autowired
private SysConfigService sysConfigService;
@Resource
private SysUserMapper sysUserMapper;
@Resource
......@@ -39,6 +46,14 @@ public class LoginServiceImpl implements LoginService {
LoginInfo loginInfo = new LoginInfo();
SysUser user = userServiceImpl.findByLoginName(logName);
//判断是否被锁定
if(user.isLockFlag())
throw new DBConfigurationError("该账号已被锁定请联系管理员解锁!");
//判断是否很久没有更改密码
if(sysConfigService.getSysConfigStateByKey(SysConfigKeyType.PWD_TIME_LIMIT.getCode())
&& DateUtils.getDaysBetween(user.getLastUpdatePwdTime(), new Date()) > 90)
throw new DBConfigurationError("您已经超过90天没有更换密码,请修改密码后再登录!");
if (user != null && user.getPassword().equals(password) && (user.getMacAddress() == null || user.getMacAddress().equals(macAddrss))) {
String token = TokenUtil.getToken(password, user);
//修改ip以及最后登录时间、MAC地址
......@@ -64,17 +79,34 @@ public class LoginServiceImpl implements LoginService {
//查询病案信息
SysVersion version = sysVersionMapper.selectLastDate();
loginInfo.setVersion(version);
RedisUtil.del(user.getUserCode());
} else {
throw new DBConfigurationError("账号、密码或者MAC地址错误!");
if(user != null) checkErrorCount(user);
throw new DBConfigurationError("登录失败请检查用户名和密码!");
}
return loginInfo;
}
private void checkErrorCount(SysUser user) {
String userCode = user.getUserCode();
if(RedisUtil.hasKey(userCode) && Integer.parseInt(RedisUtil.get(userCode).toString())>=5) {
user.setLockFlag(true);
sysUserMapper.updateByPrimaryKey(user);
return;
}
if(!RedisUtil.hasKey(userCode)) {
RedisUtil.set(userCode, 1, 5 * 60);
}else {
RedisUtil.incr(userCode, 1);
}
}
public boolean updatePass(String logName, String oldPassword, String newPassword) {
int result = 0;
SysUser user = userServiceImpl.findByLoginName(logName);
if (user != null && user.getPassword().equals(oldPassword)) {
user.setPassword(newPassword);
user.setLastUpdatePwdTime(new Date());
result = sysUserMapper.updateByPrimaryKey(user);
} else {
throw new DBConfigurationError("旧密码错误!");
......
package com.hs.api.service.Impl;
import com.hs.api.common.enums.DimType;
import com.hs.api.mapper.DicDimMapper;
import com.hs.api.mapper.SerDimValueMapper;
import com.hs.api.mapper.SerPageBlockRsMapper;
import com.hs.api.mapper.SysLoginConfigMapper;
import com.hs.api.model.DicDim;
import com.hs.api.model.SerDimValue;
import com.hs.api.mapper.SysConfigMapper;
import com.hs.api.model.SysConfig;
import com.hs.api.model.respmodel.DimValue;
import com.hs.api.service.DicDimService;
import com.hs.api.service.SysConfigService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
@Service
public class SysConfigServiceImpl implements SysConfigService {
@Resource
private SysLoginConfigMapper sysLoginConfigMapper;
private SysConfigMapper sysConfigMapper;
@Override
public boolean getSysConfigStateByKey(String key) {
List<SysConfig> sysConfigList = sysLoginConfigMapper.selectByKey(key);
List<SysConfig> sysConfigList = sysConfigMapper.selectByKey(key);
if(sysConfigList.size()==0) return false;
SysConfig sysConfig = sysConfigList.get(0);
return sysConfig.getState();
}
@Override
public String getSysConfigValueSByKey(String key) {
List<SysConfig> sysConfigList = sysConfigMapper.selectByKey(key);
if(sysConfigList.size()==0) return null;
SysConfig sysConfig = sysConfigList.get(0);
return sysConfig.getValue();
}
}
......@@ -6,4 +6,6 @@ import java.util.List;
public interface SysConfigService {
boolean getSysConfigStateByKey(String key);
String getSysConfigValueSByKey(String key);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hs.api.mapper.SysLoginConfigMapper">
<mapper namespace="com.hs.api.mapper.SysConfigMapper">
<resultMap id="ResultMap" type="com.hs.api.model.SysConfig">
<id column="ID" jdbcType="DECIMAL" property="id"/>
<result column="CREATE_DATE" jdbcType="TIMESTAMP" property="createDate"/>
......
......@@ -18,6 +18,8 @@
<result column="LAST_TIME" jdbcType="TIMESTAMP" property="lastTime"/>
<result column="LAST_IP" jdbcType="VARCHAR" property="lastIp"/>
<result column="MAC_ADDRESS" jdbcType="VARCHAR" property="macAddress"/>
<result column="LAST_UPDATE_PWD_TIME" jdbcType="TIMESTAMP" property="lastUpdatePwdTime"/>
<result column="LOCK_FLAG" jdbcType="BOOLEAN" property="lockFlag"/>
</resultMap>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
delete
......@@ -55,7 +57,9 @@
ERROR_TIME = #{errorTime,jdbcType=TIMESTAMP},
LAST_TIME = #{lastTime,jdbcType=TIMESTAMP},
LAST_IP = #{lastIp,jdbcType=VARCHAR},
MAC_ADDRESS = #{macAddress,jdbcType=VARCHAR}
MAC_ADDRESS = #{macAddress,jdbcType=VARCHAR},
LAST_UPDATE_PWD_TIME = #{lastUpdatePwdTime,jdbcType=VARCHAR},
LOCK_FLAG = #{lockFlag,jdbcType=VARCHAR}
where ID = #{id,jdbcType=DECIMAL}
</update>
<select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
......@@ -113,7 +117,9 @@
ERROR_TIME,
LAST_TIME,
LAST_IP,
MAC_ADDRESS
MAC_ADDRESS,
LAST_UPDATE_PWD_TIME,
LOCK_FLAG
from SYS_USER
where USER_CODE = #{userCode,jdbcType=VARCHAR}
and `STATE` != 0
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment