commit:1.6版本发布

This commit is contained in:
Jerry
2021-05-02 20:19:06 +08:00
parent 1a713fa34f
commit 5f9a18a8eb
78 changed files with 1183 additions and 826 deletions

View File

@@ -8,6 +8,22 @@ package com.orange.demo.common.core.constant;
*/
public final class ApplicationConstant {
/**
* 数据同步使用的缺省消息队列主题名称。
*/
public static final String DEFAULT_DATA_SYNC_TOPIC = "OrangeMultiDemo";
/**
* 全量数据同步中,新增数据对象的键名称。
*/
public static final String DEFAULT_FULL_SYNC_DATA_KEY = "data";
/**
* 全量数据同步中,原有数据对象的键名称。
*/
public static final String DEFAULT_FULL_SYNC_OLD_DATA_KEY = "oldData";
/**
* 全量数据同步中,数据对象主键的键名称。
*/
public static final String DEFAULT_FULL_SYNC_ID_KEY = "id";
/**
* 为字典表数据缓存时,缓存名称的固定后缀。
*/

View File

@@ -0,0 +1,27 @@
package com.orange.demo.common.core.exception;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 无效的Redis模式的自定义异常。
*
* @author Jerry
* @date 2020-08-08
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class InvalidRedisModeException extends RuntimeException {
private final String mode;
/**
* 构造函数。
*
* @param mode 错误的模式。
*/
public InvalidRedisModeException(String mode) {
super("Invalid Redis Mode [" + mode + "], only supports [single/cluster/sentinel/master_slave]");
this.mode = mode;
}
}

View File

@@ -0,0 +1,58 @@
package com.orange.demo.common.core.object;
import lombok.Data;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
import java.util.Date;
/**
* 在线登录用户信息。
*
* @author Jerry
* @date 2020-08-08
*/
@Data
@ToString
@Slf4j
public class LoginUserInfo {
/**
* 用户Id。
*/
private Long userId;
/**
* 用户所在部门Id。
* 仅当系统支持uaa时可用否则可以直接忽略该字段。保留该字段是为了保持单体和微服务通用代码部分的兼容性。
*/
private Long deptId;
/**
* 租户Id。
* 仅当系统支持uaa时可用否则可以直接忽略该字段。保留该字段是为了保持单体和微服务通用代码部分的兼容性。
*/
private Long tenantId;
/**
* 是否为超级管理员。
*/
private Boolean isAdmin;
/**
* 用户登录名。
*/
private String loginName;
/**
* 用户显示名称。
*/
private String showName;
/**
* 标识不同登录的会话Id。
*/
private String sessionId;
/**
* 登录IP。
*/
private String loginIp;
/**
* 登录时间。
*/
private Date loginTime;
}

View File

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
import com.orange.demo.common.core.constant.ErrorCodeEnum;
import com.orange.demo.common.core.util.ContextUtil;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@@ -15,6 +16,7 @@ import java.io.PrintWriter;
* @author Jerry
* @date 2020-08-08
*/
@Slf4j
@Data
public class ResponseResult<T> {
@@ -160,6 +162,11 @@ public class ResponseResult<T> {
* @throws IOException 异常错误。
*/
public static <T> void output(int httpStatus, ResponseResult<T> responseResult) throws IOException {
if (httpStatus != HttpServletResponse.SC_OK) {
log.error(JSON.toJSONString(responseResult));
} else {
log.info(JSON.toJSONString(responseResult));
}
HttpServletResponse response = ContextUtil.getHttpResponse();
PrintWriter out = response.getWriter();
response.setContentType("application/json; charset=utf-8");

View File

@@ -11,6 +11,7 @@ import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.util.Date;
/**
* 基于Jwt用于前后端传递的令牌对象。
@@ -45,6 +46,10 @@ public class TokenData {
* 是否为超级管理员。
*/
private Boolean isAdmin;
/**
* 用户登录名。
*/
private String loginName;
/**
* 用户显示名称。
*/
@@ -58,6 +63,14 @@ public class TokenData {
* 仅当系统支持uaa时可用否则可以直接忽略该字段。保留该字段是为了保持单体和微服务通用代码部分的兼容性。
*/
private String uaaAccessToken;
/**
* 登录IP。
*/
private String loginIp;
/**
* 登录时间。
*/
private Date loginTime;
/**
* 将令牌对象添加到Http请求对象。

View File

@@ -17,7 +17,7 @@ import java.util.Map;
@Slf4j
public class JwtUtil {
private static final String TOKEN_PREFIX = "Bearer:";
private static final String TOKEN_PREFIX = "Bearer ";
private static final String CLAIM_KEY_CREATEDTIME = "CreatedTime";
/**
@@ -61,7 +61,7 @@ public class JwtUtil {
/**
* 获取token中的数据对象
*
* @param token 令牌信息(需要包含令牌前缀,如"Bearer:")
* @param token 令牌信息(需要包含令牌前缀,如"Bearer ")
* @return 令牌中的数据对象解析视频返回null。
*/
public static Claims parseToken(String token, String signingKey) {

View File

@@ -2,6 +2,7 @@ package com.orange.demo.common.core.util;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ReflectUtil;
import com.orange.demo.common.core.exception.InvalidDataFieldException;
import com.orange.demo.common.core.annotation.*;
import com.orange.demo.common.core.exception.MyRuntimeException;
import com.orange.demo.common.core.object.TokenData;
@@ -141,6 +142,34 @@ public class MyModelUtil {
return columnInfo == null ? null : columnInfo.getFirst();
}
/**
* 映射Model对象的字段反射对象获取与该字段对应的数据库列名称。
* 如果没有匹配到ColumnName则立刻抛出异常。
*
* @param field 字段反射对象。
* @param modelClazz Model对象的Class类。
* @return 该字段所对应的数据表列名称。
*/
public static String safeMapToColumnName(Field field, Class<?> modelClazz) {
return safeMapToColumnName(field.getName(), modelClazz);
}
/**
* 映射Model对象的字段名称获取与该字段对应的数据库列名称。
* 如果没有匹配到ColumnName则立刻抛出异常。
*
* @param fieldName 字段名称。
* @param modelClazz Model对象的Class类。
* @return 该字段所对应的数据表列名称。
*/
public static String safeMapToColumnName(String fieldName, Class<?> modelClazz) {
String columnName = mapToColumnName(fieldName, modelClazz);
if (columnName == null) {
throw new InvalidDataFieldException(modelClazz.getSimpleName(), fieldName);
}
return columnName;
}
/**
* 映射Model对象的字段名称获取与该字段对应的数据库列名称和字段类型。
*

View File

@@ -8,6 +8,25 @@ package com.orange.demo.common.core.util;
*/
public class RedisKeyUtil {
/**
* 获取通用的session缓存的键前缀。
*
* @return session缓存的键前缀。
*/
public static String getSessionIdPrefix() {
return "SESSIONID__";
}
/**
* 获取指定用户Id的session缓存的键前缀。
*
* @param loginName 指定的用户登录名。
* @return session缓存的键前缀。
*/
public static String getSessionIdPrefix(String loginName) {
return "SESSIONID__" + loginName + "_";
}
/**
* 计算SessionId返回存储于Redis中的键。
*