Commit d70135ec by zhengyunfei

Merge remote-tracking branch 'origin/master'

parents 89cbb2e3 187f16c0
......@@ -75,7 +75,7 @@ public class SysLoginService {
validateCaptcha(username, code, uuid, request);
}
SysUser user = loadUserByUsername(username);
checkLogin(LoginType.PASSWORD, username, () -> !BCrypt.checkpw(password, user.getPassword()));
checkLoginNew(LoginType.PASSWORD, username, () -> !BCrypt.checkpw(password, user.getPassword()));
// 此处可根据登录用户的数据不同 自行创建 loginUser
LoginUser loginUser = buildLoginUser(user);
// 生成token
......@@ -292,4 +292,39 @@ public class SysLoginService {
// 登录成功 清空错误次数
RedisUtils.deleteObject(errorKey);
}
/**
* 登录校验
*/
private void checkLoginNew(LoginType loginType, String username, Supplier<Boolean> supplier) {
String errorKey = CacheConstants.PWD_ERR_CNT_KEY + username;
String loginFail = Constants.LOGIN_FAIL;
// 获取用户登录错误次数(可自定义限制策略 例如: key + username + ip)
Integer errorNumber = RedisUtils.getCacheObject(errorKey);
// 锁定时间内登录 则踢出
if (ObjectUtil.isNotNull(errorNumber) && errorNumber.equals(maxRetryCount)) {
recordLogininfor(username, loginFail, MessageUtils.message(loginType.getRetryLimitExceed(), maxRetryCount, lockTime));
throw new ServiceException("账号密码错误"+maxRetryCount +"次");
}
if (supplier.get()) {
// 是否第一次
errorNumber = ObjectUtil.isNull(errorNumber) ? 1 : errorNumber + 1;
// 达到规定错误次数 则锁定登录
if (errorNumber.equals(maxRetryCount)) {
RedisUtils.setCacheObject(errorKey, errorNumber, Duration.ofMinutes(lockTime));
recordLogininfor(username, loginFail, MessageUtils.message(loginType.getRetryLimitExceed(), maxRetryCount, lockTime));
throw new ServiceException("账号密码错误"+maxRetryCount +"次");
} else {
// 未达到规定错误次数 则递增
RedisUtils.setCacheObject(errorKey, errorNumber);
recordLogininfor(username, loginFail, MessageUtils.message(loginType.getRetryLimitCount(), errorNumber));
throw new ServiceException("账号密码错误"+errorNumber +"次");
}
}
// 登录成功 清空错误次数
RedisUtils.deleteObject(errorKey);
}
}
......@@ -16,7 +16,7 @@
<result property="rightAnswersPic" column="right_answers_pic"/>
<result property="resolveCourse" column="resolve_course"/>
<result property="resolveVideo" column="resolve_video"/>
<result property="resolveVideName" column="resolve_vide_name"/>
<result property="resolveVideoName" column="resolve_video_name"/>
<result property="remark" column="remark"/>
<result property="status" column="status"/>
<result property="createTime" column="create_time"/>
......@@ -37,7 +37,7 @@
<result property="rightAnswersPic" column="right_answers_pic"/>
<result property="resolveCourse" column="resolve_course"/>
<result property="resolveVideo" column="resolve_video"/>
<result property="resolveVideoName" column="resolve_vide_name"/>
<result property="resolveVideoName" column="resolve_video_name"/>
<result property="remark" column="remark"/>
<result property="status" column="status"/>
<collection property="options" ofType="com.ruoyi.school.paper.domain.vo.DbQuestionBankAnswerVo">
......@@ -62,7 +62,7 @@
bank.right_answers_pic,
bank.resolve_course,
bank.resolve_video,
bank.resolve_vide_name,
bank.resolve_video_name,
bank.remark,
bank.status,
answer.id as a_id,
......@@ -81,7 +81,7 @@
<result property="topic" column="topic"/>
<result property="resolveCourse" column="resolve_course"/>
<result property="resolveVideo" column="resolve_video"/>
<result property="resolveVideName" column="resolve_vide_name"/>
<result property="resolveVideName" column="resolve_video_name"/>
<collection property="options" javaType="java.util.List" resultMap="DbQuestionBankAnswerResult"/>
</resultMap>
<resultMap type="com.ruoyi.school.paper.domain.DbQuestionBankAnswer" id="DbQuestionBankAnswerResult">
......@@ -102,7 +102,7 @@
qb.topic as topic,
qb.resolve_course,
qb.resolve_video,
qb.resolve_vide_name,
qb.resolve_video_name,
dqba.*
from db_question_bank qb
left join db_question_bank_answer dqba on qb.id = dqba.question_bank_id
......
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