Commit d70135ec by zhengyunfei

Merge remote-tracking branch 'origin/master'

parents 89cbb2e3 187f16c0
...@@ -75,7 +75,7 @@ public class SysLoginService { ...@@ -75,7 +75,7 @@ public class SysLoginService {
validateCaptcha(username, code, uuid, request); validateCaptcha(username, code, uuid, request);
} }
SysUser user = loadUserByUsername(username); 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 loginUser = buildLoginUser(user); LoginUser loginUser = buildLoginUser(user);
// 生成token // 生成token
...@@ -292,4 +292,39 @@ public class SysLoginService { ...@@ -292,4 +292,39 @@ public class SysLoginService {
// 登录成功 清空错误次数 // 登录成功 清空错误次数
RedisUtils.deleteObject(errorKey); 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 @@ ...@@ -16,7 +16,7 @@
<result property="rightAnswersPic" column="right_answers_pic"/> <result property="rightAnswersPic" column="right_answers_pic"/>
<result property="resolveCourse" column="resolve_course"/> <result property="resolveCourse" column="resolve_course"/>
<result property="resolveVideo" column="resolve_video"/> <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="remark" column="remark"/>
<result property="status" column="status"/> <result property="status" column="status"/>
<result property="createTime" column="create_time"/> <result property="createTime" column="create_time"/>
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
<result property="rightAnswersPic" column="right_answers_pic"/> <result property="rightAnswersPic" column="right_answers_pic"/>
<result property="resolveCourse" column="resolve_course"/> <result property="resolveCourse" column="resolve_course"/>
<result property="resolveVideo" column="resolve_video"/> <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="remark" column="remark"/>
<result property="status" column="status"/> <result property="status" column="status"/>
<collection property="options" ofType="com.ruoyi.school.paper.domain.vo.DbQuestionBankAnswerVo"> <collection property="options" ofType="com.ruoyi.school.paper.domain.vo.DbQuestionBankAnswerVo">
...@@ -62,7 +62,7 @@ ...@@ -62,7 +62,7 @@
bank.right_answers_pic, bank.right_answers_pic,
bank.resolve_course, bank.resolve_course,
bank.resolve_video, bank.resolve_video,
bank.resolve_vide_name, bank.resolve_video_name,
bank.remark, bank.remark,
bank.status, bank.status,
answer.id as a_id, answer.id as a_id,
...@@ -81,7 +81,7 @@ ...@@ -81,7 +81,7 @@
<result property="topic" column="topic"/> <result property="topic" column="topic"/>
<result property="resolveCourse" column="resolve_course"/> <result property="resolveCourse" column="resolve_course"/>
<result property="resolveVideo" column="resolve_video"/> <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"/> <collection property="options" javaType="java.util.List" resultMap="DbQuestionBankAnswerResult"/>
</resultMap> </resultMap>
<resultMap type="com.ruoyi.school.paper.domain.DbQuestionBankAnswer" id="DbQuestionBankAnswerResult"> <resultMap type="com.ruoyi.school.paper.domain.DbQuestionBankAnswer" id="DbQuestionBankAnswerResult">
...@@ -102,7 +102,7 @@ ...@@ -102,7 +102,7 @@
qb.topic as topic, qb.topic as topic,
qb.resolve_course, qb.resolve_course,
qb.resolve_video, qb.resolve_video,
qb.resolve_vide_name, qb.resolve_video_name,
dqba.* dqba.*
from db_question_bank qb from db_question_bank qb
left join db_question_bank_answer dqba on qb.id = dqba.question_bank_id 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