更新依赖;解决依赖冲突;调整、重构代码。
This commit is contained in:
@@ -7,19 +7,18 @@ import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
||||
|
||||
import xyz.zhouxy.plusone.exception.handler.BaseExceptionHandler;
|
||||
import xyz.zhouxy.plusone.exception.handler.ExceptionInfoHolderFactory;
|
||||
import xyz.zhouxy.plusone.system.application.exception.AccountLoginException;
|
||||
import xyz.zhouxy.plusone.util.RestfulResult;
|
||||
|
||||
@RestControllerAdvice
|
||||
public class AccountLoginExceptionHandler extends BaseExceptionHandler {
|
||||
|
||||
protected AccountLoginExceptionHandler(ExceptionInfoHolder exceptionInfoHolder) {
|
||||
super(exceptionInfoHolder);
|
||||
protected AccountLoginExceptionHandler() {
|
||||
super(ExceptionInfoHolderFactory.newDefaultExceptionInfoHolder());
|
||||
}
|
||||
|
||||
@ExceptionHandler({
|
||||
AccountLoginException.class,
|
||||
})
|
||||
@ExceptionHandler({ AccountLoginException.class })
|
||||
public ResponseEntity<RestfulResult> handleException(@Nonnull Exception e) {
|
||||
return buildExceptionResponse(e);
|
||||
}
|
||||
|
@@ -15,6 +15,7 @@ import cn.dev33.satoken.exception.SaTokenException;
|
||||
import cn.dev33.satoken.exception.SameTokenInvalidException;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import xyz.zhouxy.plusone.exception.handler.BaseExceptionHandler;
|
||||
import xyz.zhouxy.plusone.exception.handler.ExceptionInfoHolderFactory;
|
||||
import xyz.zhouxy.plusone.util.RestfulResult;
|
||||
|
||||
/**
|
||||
@@ -26,8 +27,8 @@ import xyz.zhouxy.plusone.util.RestfulResult;
|
||||
@Slf4j
|
||||
public class SaTokenExceptionHandler extends BaseExceptionHandler {
|
||||
|
||||
public SaTokenExceptionHandler(ExceptionInfoHolder exceptionInfoHolder) {
|
||||
super(exceptionInfoHolder);
|
||||
public SaTokenExceptionHandler() {
|
||||
super(ExceptionInfoHolderFactory.newDefaultExceptionInfoHolder());
|
||||
set(NotPermissionException.class, 4030103, "会话未能通过权限认证", HttpStatus.FORBIDDEN);
|
||||
set(NotRoleException.class, 4030103, "会话未能通过角色认证", HttpStatus.FORBIDDEN);
|
||||
set(DisableServiceException.class, 4030202, "账号指定服务已被封禁", HttpStatus.FORBIDDEN);
|
||||
@@ -36,7 +37,7 @@ public class SaTokenExceptionHandler extends BaseExceptionHandler {
|
||||
set(NotSafeException.class, 4020300, "会话未能通过二级认证", HttpStatus.UNAUTHORIZED);
|
||||
set(NotLoginException.class,
|
||||
4020400,
|
||||
e -> switch (((NotLoginException) e).getType()) {
|
||||
e -> switch (e.getType()) {
|
||||
case NotLoginException.NOT_TOKEN -> "未提供 Token";
|
||||
case NotLoginException.INVALID_TOKEN -> "Token 无效";
|
||||
case NotLoginException.TOKEN_TIMEOUT -> "Token 已过期";
|
||||
|
@@ -2,12 +2,12 @@ package xyz.zhouxy.plusone.system.application.query;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.ibatis.jdbc.SQL;
|
||||
import org.springframework.jdbc.core.BeanPropertyRowMapper;
|
||||
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
|
||||
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import xyz.zhouxy.plusone.sql.SQL;
|
||||
import xyz.zhouxy.plusone.system.application.query.params.DictQueryParams;
|
||||
import xyz.zhouxy.plusone.system.application.query.result.DictOverview;
|
||||
|
||||
@@ -26,14 +26,21 @@ public class DictQueries {
|
||||
}
|
||||
|
||||
public List<DictOverview> queryDictOverviewList(DictQueryParams queryParams) {
|
||||
String sql = new SQL()
|
||||
.SELECT("id", "dict_type", "dict_label",
|
||||
"created_by", "create_time", "updated_by", "update_time", "count")
|
||||
.FROM("view_sys_dict_overview")
|
||||
.WHERE_IF(queryParams.getDictType() != null, "dict_type LIKE '%:dictType%'")
|
||||
.WHERE_IF(queryParams.getDictLabel() != null, "dict_label LIKE '%:dictLabel%'")
|
||||
.toString();
|
||||
String sql = new SQL() {
|
||||
{
|
||||
SELECT("id", "dict_type", "dict_label",
|
||||
"created_by", "create_time", "updated_by", "update_time", "count");
|
||||
FROM("view_sys_dict_overview");
|
||||
if (queryParams.getDictType() != null) {
|
||||
WHERE("dict_type LIKE '%:dictType%'");
|
||||
}
|
||||
if (queryParams.getDictLabel() != null) {
|
||||
WHERE("dict_label LIKE '%:dictLabel%'");
|
||||
}
|
||||
}
|
||||
}.toString();
|
||||
return this.jdbcTemplate
|
||||
.query(sql, new BeanPropertySqlParameterSource(queryParams), new BeanPropertyRowMapper<>(DictOverview.class));
|
||||
.query(sql, new BeanPropertySqlParameterSource(queryParams),
|
||||
new BeanPropertyRowMapper<>(DictOverview.class));
|
||||
}
|
||||
}
|
||||
|
@@ -7,7 +7,7 @@ import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
|
||||
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import xyz.zhouxy.plusone.sql.SQL;
|
||||
import org.apache.ibatis.jdbc.SQL;
|
||||
import xyz.zhouxy.plusone.system.application.query.params.RoleQueryParams;
|
||||
import xyz.zhouxy.plusone.system.application.query.result.RoleOverview;
|
||||
|
||||
@@ -35,30 +35,47 @@ public class RoleQueries {
|
||||
* @return 查询结果
|
||||
*/
|
||||
public List<RoleOverview> query(RoleQueryParams params) {
|
||||
String b = new SQL()
|
||||
.SELECT("id")
|
||||
.FROM("sys_role")
|
||||
.WHERE_IF_NOT_NULL(params.getId(), "id = :id")
|
||||
.WHERE_IF_NOT_NULL(params.getName(), "name = :name")
|
||||
.WHERE_IF_NOT_NULL(params.getIdentifier(), "identifier = :identifier")
|
||||
.WHERE_IF_NOT_NULL(params.getStatus(), "status = :status")
|
||||
.WHERE_IF_NOT_NULL(params.getCreateTimeStart(), "create_time >= :createTimeStart")
|
||||
.WHERE_IF_NOT_NULL(params.getCreateTimeEnd(), "create_time < :createTimeEnd")
|
||||
.WHERE_IF_NOT_NULL(params.getUpdateTimeStart(), "update_time >= :updateTimeStart")
|
||||
.WHERE_IF_NOT_NULL(params.getUpdateTimeEnd(), "update_time < :updateTimeEnd")
|
||||
.LIMIT(params.getSize())
|
||||
.OFFSET(params.getOffset())
|
||||
.toString();
|
||||
var sql = """
|
||||
SELECT a.id AS id, a.name AS name, a.identifier AS identifier, a.status AS status
|
||||
FROM sys_role AS a, (
|
||||
""" + b + """
|
||||
) AS b
|
||||
WHERE a.id = b.id
|
||||
""";
|
||||
var sql = new SQL() {
|
||||
{
|
||||
SELECT("a.id AS id", "a.name AS name", "a.identifier AS identifier", "a.status AS status");
|
||||
FROM("sys_role AS a", "(" +
|
||||
new SQL() {
|
||||
{
|
||||
SELECT("id");
|
||||
FROM("sys_role");
|
||||
if (null != params.getId()) {
|
||||
WHERE("id = :id");
|
||||
}
|
||||
if (null != params.getName()) {
|
||||
WHERE("name = :name");
|
||||
}
|
||||
if (null != params.getIdentifier()) {
|
||||
WHERE("identifier = :identifier");
|
||||
}
|
||||
if (null != params.getStatus()) {
|
||||
WHERE("status = :status");
|
||||
}
|
||||
if (null != params.getCreateTimeStart()) {
|
||||
WHERE("create_time >= :createTimeStart");
|
||||
}
|
||||
if (null != params.getCreateTimeEnd()) {
|
||||
WHERE("create_time < :createTimeEnd");
|
||||
}
|
||||
if (null != params.getUpdateTimeStart()) {
|
||||
WHERE("update_time >= :updateTimeStart");
|
||||
}
|
||||
if (null != params.getUpdateTimeEnd()) {
|
||||
WHERE("update_time < :updateTimeEnd");
|
||||
}
|
||||
LIMIT(params.getSize());
|
||||
OFFSET(params.getOffset());
|
||||
}
|
||||
}.toString() + ") AS b");
|
||||
WHERE("a.id = b.id");
|
||||
}
|
||||
}.toString();
|
||||
return this.jdbcTemplate
|
||||
.query(sql, new BeanPropertySqlParameterSource(params),
|
||||
new BeanPropertyRowMapper<>(RoleOverview.class));
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -1,13 +1,11 @@
|
||||
package xyz.zhouxy.plusone.system.application.service.command.validator;
|
||||
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import xyz.zhouxy.plusone.constant.RegexConsts;
|
||||
import xyz.zhouxy.plusone.system.application.service.command.LoginByOtpCommand;
|
||||
import xyz.zhouxy.plusone.util.RegexUtil;
|
||||
import xyz.zhouxy.plusone.validator.BaseValidator;
|
||||
import xyz.zhouxy.plusone.validator.DtoValidator;
|
||||
|
||||
@@ -15,15 +13,13 @@ import xyz.zhouxy.plusone.validator.DtoValidator;
|
||||
@DtoValidator(LoginByOtpCommand.class)
|
||||
public class LoginByOtpCommandValidator extends BaseValidator<LoginByOtpCommand> {
|
||||
public LoginByOtpCommandValidator() {
|
||||
withRule(loginCommand -> {
|
||||
String principal = loginCommand.getPrincipal();
|
||||
return StringUtils.hasText(principal)
|
||||
&&
|
||||
RegexUtil.matchesOr(principal, RegexConsts.EMAIL, RegexConsts.MOBILE_PHONE);
|
||||
}, "输入邮箱地址或手机号");
|
||||
withRule(loginCommand -> {
|
||||
String otp = loginCommand.getOtp();
|
||||
return StringUtils.hasText(otp) && Pattern.matches(RegexConsts.CAPTCHA, otp);
|
||||
}, "验证码不符合要求");
|
||||
ruleForString(LoginByOtpCommand::getPrincipal)
|
||||
.notNull("输入邮箱地址或手机号")
|
||||
.notEmpty("输入邮箱地址或手机号")
|
||||
.matchesOr(List.of(RegexConsts.EMAIL, RegexConsts.MOBILE_PHONE), "输入用户名、邮箱地址或手机号");
|
||||
ruleForString(LoginByOtpCommand::getOtp)
|
||||
.notNull("验证码不能为空")
|
||||
.notEmpty("验证码不能为空")
|
||||
.matches(RegexConsts.CAPTCHA, "验证码格式不正确");
|
||||
}
|
||||
}
|
||||
|
@@ -1,13 +1,9 @@
|
||||
package xyz.zhouxy.plusone.system.application.service.command.validator;
|
||||
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import java.util.List;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import xyz.zhouxy.plusone.constant.RegexConsts;
|
||||
import xyz.zhouxy.plusone.system.application.service.command.LoginByPasswordCommand;
|
||||
import xyz.zhouxy.plusone.util.RegexUtil;
|
||||
import xyz.zhouxy.plusone.validator.BaseValidator;
|
||||
import xyz.zhouxy.plusone.validator.DtoValidator;
|
||||
|
||||
@@ -15,17 +11,14 @@ import xyz.zhouxy.plusone.validator.DtoValidator;
|
||||
@DtoValidator(LoginByPasswordCommand.class)
|
||||
public class LoginByPasswordCommandValidator extends BaseValidator<LoginByPasswordCommand> {
|
||||
public LoginByPasswordCommandValidator() {
|
||||
withRule(loginCommand -> {
|
||||
String principal = loginCommand.getPrincipal();
|
||||
return StringUtils.hasText(principal)
|
||||
&&
|
||||
RegexUtil.matchesOr(principal, RegexConsts.USERNAME, RegexConsts.EMAIL, RegexConsts.MOBILE_PHONE, principal);
|
||||
}, "输入用户名、邮箱地址或手机号");
|
||||
withRule(loginCommand -> {
|
||||
String password = loginCommand.getPassword();
|
||||
return StringUtils.hasText(password)
|
||||
&&
|
||||
Pattern.matches(RegexConsts.PASSWORD, password);
|
||||
}, "密码格式不正确");
|
||||
ruleForString(LoginByPasswordCommand::getPrincipal)
|
||||
.notNull("输入用户名、邮箱地址或手机号")
|
||||
.notEmpty("输入用户名、邮箱地址或手机号")
|
||||
.matchesOr(List.of(RegexConsts.USERNAME, RegexConsts.EMAIL, RegexConsts.MOBILE_PHONE),
|
||||
"输入用户名、邮箱地址或手机号");
|
||||
ruleForString(LoginByPasswordCommand::getPassword)
|
||||
.notNull("密码不能为空")
|
||||
.notEmpty("密码不能为空")
|
||||
.matches(RegexConsts.PASSWORD, "密码格式不正确");
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user