重写用户快速登录逻辑

This commit is contained in:
YunaiV
2020-07-03 19:12:56 +08:00
parent ee7cf3e871
commit 3d6bd5e4ee
57 changed files with 1107 additions and 228 deletions

View File

@@ -0,0 +1,14 @@
package cn.iocoder.common.framework.util;
import cn.hutool.crypto.digest.BCrypt;
/**
* 加解密工具类
*/
public class DigestUtils {
public static String bcrypt(String key, String salt) {
return BCrypt.hashpw(key, salt);
}
}

View File

@@ -7,7 +7,7 @@ import org.apache.skywalking.apm.toolkit.trace.TraceContext;
import javax.servlet.ServletRequest;
import java.util.UUID;
public class MallUtil {
public class MallUtils {
public static Integer getUserId(ServletRequest request) {
return (Integer) request.getAttribute(MallConstants.REQUEST_ATTR_USER_ID_KEY);
@@ -46,7 +46,7 @@ public class MallUtil {
*/
public static String getTraceId() {
String traceId = TraceContext.traceId();
if (StringUtil.hasText(traceId)) {
if (StringUtils.hasText(traceId)) {
return traceId;
}
// TODO 芋艿 多次调用会问题

View File

@@ -85,7 +85,7 @@ public class ServiceExceptionUtil {
* @return 异常
*/
public static ServiceException exception(Integer code) {
return new ServiceException(code, messages.get(code));
return exception(code, messages.get(code));
}
/**
@@ -96,11 +96,10 @@ public class ServiceExceptionUtil {
* @return 异常
*/
public static ServiceException exception(Integer code, Object... params) {
String message = doFormat(code, messages.get(code), params);
return new ServiceException(code, message);
return exception0(code, messages.get(code), params);
}
public static ServiceException exception(Integer code, String messagePattern, Object... params) {
public static ServiceException exception0(Integer code, String messagePattern, Object... params) {
String message = doFormat(code, messagePattern, params);
return new ServiceException(code, message);
}

View File

@@ -1,29 +1,26 @@
package cn.iocoder.common.framework.util;
import org.springframework.util.StringUtils;
import cn.hutool.core.lang.UUID;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.*;
public class StringUtil {
public class StringUtils {
public static boolean hasText(String str) {
return StringUtils.hasText(str);
return org.springframework.util.StringUtils.hasText(str);
}
public static String join(Collection<?> coll, String delim) {
return StringUtils.collectionToDelimitedString(coll, delim);
return org.springframework.util.StringUtils.collectionToDelimitedString(coll, delim);
}
public static List<String> split(String toSplit, String delim) {
String[] stringArray = StringUtils.tokenizeToStringArray(toSplit, delim);
String[] stringArray = org.springframework.util.StringUtils.tokenizeToStringArray(toSplit, delim);
return Arrays.asList(stringArray);
}
public static List<Integer> splitToInt(String toSplit, String delim) {
String[] stringArray = StringUtils.tokenizeToStringArray(toSplit, delim);
String[] stringArray = org.springframework.util.StringUtils.tokenizeToStringArray(toSplit, delim);
List<Integer> array = new ArrayList<>(stringArray.length);
for (String string : stringArray) {
array.add(Integer.valueOf(string));
@@ -34,4 +31,9 @@ public class StringUtil {
public static String substring(String str, int start) {
return org.apache.commons.lang3.StringUtils.substring(str, start);
}
public static String uuid(boolean isSimple) {
return UUID.fastUUID().toString(isSimple);
}
}

View File

@@ -0,0 +1,28 @@
package cn.iocoder.common.framework.validator;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
@Target({
ElementType.METHOD,
ElementType.FIELD,
ElementType.ANNOTATION_TYPE,
ElementType.CONSTRUCTOR,
ElementType.PARAMETER,
ElementType.TYPE_USE
})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(
validatedBy = InEnumValidator.class
)
public @interface Mobile {
String message() default "手机号格式不正确";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}

View File

@@ -0,0 +1,19 @@
package cn.iocoder.common.framework.validator;
import cn.iocoder.common.framework.util.ValidationUtil;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class MobileValidator implements ConstraintValidator<Mobile, String> {
@Override
public void initialize(Mobile annotation) {
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
return ValidationUtil.isMobile(value);
}
}

View File

@@ -1,26 +1,36 @@
package cn.iocoder.common.framework.vo;
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
import com.fasterxml.jackson.annotation.JsonIgnore;
import org.springframework.util.Assert;
import java.io.Serializable;
/**
* 通用返回
*
* @param <T> 数据泛型
*/
public final class CommonResult<T> implements Serializable {
private static Integer CODE_SUCCESS = 0;
private static final Integer CODE_SUCCESS = 0;
/**
* 错误码
*/
private Integer code;
/**
* 错误提示
*/
private String message;
/**
* 返回数据
*/
private T data;
/**
* 错误提示,用户可阅读
*/
private String message;
/**
* 错误明细,内部调试错误
*/
private String detailMessage;
/**
* 将传入的 result 对象,转换成另外一个泛型结果的对象
@@ -75,6 +85,15 @@ public final class CommonResult<T> implements Serializable {
this.data = data;
}
public String getDetailMessage() {
return detailMessage;
}
public CommonResult<T> setDetailMessage(String detailMessage) {
this.detailMessage = detailMessage;
return this;
}
@JsonIgnore
public boolean isSuccess() {
return CODE_SUCCESS.equals(code);
@@ -85,6 +104,16 @@ public final class CommonResult<T> implements Serializable {
return !isSuccess();
}
/**
* 判断是否有异常。如果有,则抛出 {@link cn.iocoder.common.framework.exception.ServiceException} 异常
*/
public void checkError() {
if (isSuccess()) {
return;
}
throw ServiceExceptionUtil.exception0(code, message);
}
@Override
public String toString() {
return "CommonResult{" +

View File

@@ -44,4 +44,30 @@ public class QueryWrapperX<T> extends QueryWrapper<T> {
return this;
}
// ========== 重写父类方法,方便链式调用 ==========
@Override
public QueryWrapperX<T> eq(boolean condition, String column, Object val) {
super.eq(condition, column, val);
return this;
}
@Override
public QueryWrapperX<T> eq(String column, Object val) {
super.eq(column, val);
return this;
}
@Override
public QueryWrapperX<T> orderByDesc(String column) {
super.orderByDesc(true, column);
return this;
}
@Override
public QueryWrapperX<T> last(String lastSql) {
super.last(lastSql);
return this;
}
}

View File

@@ -4,7 +4,7 @@ import cn.iocoder.common.framework.constant.SysErrorCodeEnum;
import cn.iocoder.common.framework.exception.ServiceException;
import cn.iocoder.common.framework.util.ExceptionUtil;
import cn.iocoder.common.framework.util.HttpUtil;
import cn.iocoder.common.framework.util.MallUtil;
import cn.iocoder.common.framework.util.MallUtils;
import cn.iocoder.common.framework.vo.CommonResult;
import cn.iocoder.mall.system.rpc.api.systemlog.SystemLogRPC;
import cn.iocoder.mall.system.rpc.request.systemlog.ExceptionLogAddRequest;
@@ -108,7 +108,7 @@ public class GlobalExceptionHandler {
exceptionLog.setExceptionMethodName(stackTraceElement.getMethodName());
exceptionLog.setExceptionLineNumber(stackTraceElement.getLineNumber());
// 设置其它字段
exceptionLog.setTraceId(MallUtil.getTraceId())
exceptionLog.setTraceId(MallUtils.getTraceId())
.setApplicationName(applicationName)
.setUri(request.getRequestURI()) // TODO 提升:如果想要优化,可以使用 Swagger 的 @ApiOperation 注解。
.setQueryString(HttpUtil.buildQueryString(request))

View File

@@ -1,7 +1,7 @@
package cn.iocoder.mall.web.core.interceptor;
import cn.iocoder.common.framework.util.HttpUtil;
import cn.iocoder.common.framework.util.MallUtil;
import cn.iocoder.common.framework.util.MallUtils;
import cn.iocoder.common.framework.vo.CommonResult;
import cn.iocoder.mall.system.rpc.api.systemlog.SystemLogRPC;
import cn.iocoder.mall.system.rpc.request.systemlog.AccessLogAddRequest;
@@ -63,7 +63,7 @@ public class AccessLogInterceptor extends HandlerInterceptorAdapter {
accessLog.setErrorCode(result.getCode())
.setErrorMessage(result.getMessage());
// 设置其它字段
accessLog.setTraceId(MallUtil.getTraceId())
accessLog.setTraceId(MallUtils.getTraceId())
.setApplicationName(applicationName)
.setUri(request.getRequestURI()) // TODO 提升:如果想要优化,可以使用 Swagger 的 @ApiOperation 注解。
.setQueryString(HttpUtil.buildQueryString(request))