update system env

This commit is contained in:
lixiaodong 2023-07-12 22:58:04 +08:00
parent 1ad96b81e9
commit 0d17270b11
11 changed files with 67 additions and 34 deletions

View File

@ -8,6 +8,7 @@ import net.lab1024.sa.common.common.interceptor.AbstractInterceptor;
import net.lab1024.sa.common.common.util.SmartEnumUtil; import net.lab1024.sa.common.common.util.SmartEnumUtil;
import net.lab1024.sa.common.handler.GlobalExceptionHandler; import net.lab1024.sa.common.handler.GlobalExceptionHandler;
import net.lab1024.sa.common.module.support.token.TokenService; import net.lab1024.sa.common.module.support.token.TokenService;
import org.apache.commons.lang3.math.NumberUtils;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
@ -22,6 +23,22 @@ import javax.servlet.http.HttpServletResponse;
@Configuration @Configuration
public class AdminInterceptor extends AbstractInterceptor { public class AdminInterceptor extends AbstractInterceptor {
/**
* 开发环境 方便调试 默认 user id 1
* 可以根据id 查询实际用户数据
*
* @param token
*/
@Override
public RequestUser getDevRequestUser(String token) {
long userId = NumberUtils.toLong(token, 1L);
RequestUser requestUser = new RequestUser();
requestUser.setUserId(userId);
requestUser.setUserName("dev");
requestUser.setUserType(UserTypeEnum.ADMIN_EMPLOYEE);
return requestUser;
}
@Override @Override
public RequestUser checkTokenAndGetUser() { public RequestUser checkTokenAndGetUser() {
/** /**

View File

@ -3,7 +3,7 @@ package net.lab1024.sa.common.common.domain;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import net.lab1024.sa.common.common.enumeration.SystemEnvironmentEnum; import net.lab1024.sa.common.common.enumeration.SystemEnvEnum;
/** /**
* 系统环境 * 系统环境
@ -16,7 +16,7 @@ import net.lab1024.sa.common.common.enumeration.SystemEnvironmentEnum;
*/ */
@AllArgsConstructor @AllArgsConstructor
@Getter @Getter
public class SystemEnvironment { public class SystemEnv {
/** /**
* 是否位生产环境 * 是否位生产环境
@ -31,5 +31,5 @@ public class SystemEnvironment {
/** /**
* 当前环境 * 当前环境
*/ */
private SystemEnvironmentEnum currentEnvironment; private SystemEnvEnum currentEnv;
} }

View File

@ -15,7 +15,7 @@ import lombok.Getter;
*/ */
@AllArgsConstructor @AllArgsConstructor
@Getter @Getter
public enum SystemEnvironmentEnum implements BaseEnum { public enum SystemEnvEnum implements BaseEnum {
/** /**
* dev * dev
*/ */

View File

@ -8,8 +8,12 @@ import net.lab1024.sa.common.common.constant.RequestHeaderConst;
import net.lab1024.sa.common.common.constant.StringConst; import net.lab1024.sa.common.common.constant.StringConst;
import net.lab1024.sa.common.common.domain.RequestUser; import net.lab1024.sa.common.common.domain.RequestUser;
import net.lab1024.sa.common.common.domain.ResponseDTO; import net.lab1024.sa.common.common.domain.ResponseDTO;
import net.lab1024.sa.common.common.domain.SystemEnv;
import net.lab1024.sa.common.common.enumeration.SystemEnvEnum;
import net.lab1024.sa.common.common.util.SmartRequestUtil; import net.lab1024.sa.common.common.util.SmartRequestUtil;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpMethod; import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
@ -23,6 +27,7 @@ import java.util.List;
/** /**
* 抽象拦截器 * 抽象拦截器
* 如果有额外的拦截处理 可以继承此类
* *
* @Author 1024创新实验室: 罗伊 * @Author 1024创新实验室: 罗伊
* @Date 2021-10-09 20:56:14 * @Date 2021-10-09 20:56:14
@ -32,6 +37,9 @@ import java.util.List;
*/ */
public abstract class AbstractInterceptor implements HandlerInterceptor { public abstract class AbstractInterceptor implements HandlerInterceptor {
@Autowired
private SystemEnv systemEnv;
/** /**
* Token获取用户信息 * Token获取用户信息
* *
@ -39,6 +47,14 @@ public abstract class AbstractInterceptor implements HandlerInterceptor {
*/ */
public abstract RequestUser checkTokenAndGetUser(); public abstract RequestUser checkTokenAndGetUser();
/**
* 获取 dev 开发用户
*
* @param token
* @return
*/
public abstract RequestUser getDevRequestUser(String token);
/** /**
* 拦截路径 * 拦截路径
* *
@ -89,24 +105,25 @@ public abstract class AbstractInterceptor implements HandlerInterceptor {
if (this.contain(this.getIgnoreUrlList(), target)) { if (this.contain(this.getIgnoreUrlList(), target)) {
return true; return true;
} }
//不需要登录
NoNeedLogin noNeedLogin = ((HandlerMethod) handler).getMethodAnnotation(NoNeedLogin.class);
// 检查是否包含 token // 检查是否包含 token
String xRequestToken = request.getParameter(RequestHeaderConst.TOKEN); String xRequestToken = request.getParameter(RequestHeaderConst.TOKEN);
String xHeaderToken = request.getHeader(RequestHeaderConst.TOKEN); String xHeaderToken = request.getHeader(RequestHeaderConst.TOKEN);
String xAccessToken = StringUtils.isNotBlank(xRequestToken) ? xRequestToken : xHeaderToken; String xAccessToken = StringUtils.isNotBlank(xRequestToken) ? xRequestToken : xHeaderToken;
// 包含token 则获取用户信息 并保存 // 包含token 则获取用户信息 并保存
if (StringUtils.isNotBlank(xAccessToken)) { if (StringUtils.isNotBlank(xAccessToken)) {
RequestUser requestUser = this.checkTokenAndGetUser(); // TODO listen 待处理有token 已失效的情况
if (requestUser != null) { RequestUser requestUser;
// 开发环境 token 处理 不需要的话 可以去掉
if (SystemEnvEnum.DEV == systemEnv.getCurrentEnv() && NumberUtils.isDigits(xAccessToken)) {
requestUser = this.getDevRequestUser(xAccessToken);
} else {
requestUser = this.checkTokenAndGetUser();
}
SmartRequestUtil.setUser(requestUser); SmartRequestUtil.setUser(requestUser);
} }
// 有token 无需登录
if (null != noNeedLogin) { // 是否需要登录
return true; NoNeedLogin noNeedLogin = ((HandlerMethod) handler).getMethodAnnotation(NoNeedLogin.class);
}
}
// 无token 无需登录
if (null != noNeedLogin) { if (null != noNeedLogin) {
return true; return true;
} }

View File

@ -153,7 +153,7 @@ public class DataSourceConfig {
* *
* @return * @return
*/ */
@Conditional(SystemEnvironmentConfig.class) @Conditional(SystemEnvConfig.class)
@Bean @Bean
public ServletRegistrationBean<StatViewServlet> druidServlet() { public ServletRegistrationBean<StatViewServlet> druidServlet() {
ServletRegistrationBean<StatViewServlet> servletRegistrationBean = new ServletRegistrationBean<>(); ServletRegistrationBean<StatViewServlet> servletRegistrationBean = new ServletRegistrationBean<>();

View File

@ -57,7 +57,7 @@ import java.util.Map;
@Slf4j @Slf4j
@EnableSwagger2 @EnableSwagger2
@Configuration @Configuration
@Conditional(SystemEnvironmentConfig.class) @Conditional(SystemEnvConfig.class)
public class SwaggerConfig implements EnvironmentAware, BeanDefinitionRegistryPostProcessor { public class SwaggerConfig implements EnvironmentAware, BeanDefinitionRegistryPostProcessor {
/** /**

View File

@ -1,7 +1,7 @@
package net.lab1024.sa.common.config; package net.lab1024.sa.common.config;
import net.lab1024.sa.common.common.domain.SystemEnvironment; import net.lab1024.sa.common.common.domain.SystemEnv;
import net.lab1024.sa.common.common.enumeration.SystemEnvironmentEnum; import net.lab1024.sa.common.common.enumeration.SystemEnvEnum;
import net.lab1024.sa.common.common.util.SmartEnumUtil; import net.lab1024.sa.common.common.util.SmartEnumUtil;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
@ -21,7 +21,7 @@ import org.springframework.core.type.AnnotatedTypeMetadata;
* @Copyright 1024创新实验室 https://1024lab.net * @Copyright 1024创新实验室 https://1024lab.net
*/ */
@Configuration @Configuration
public class SystemEnvironmentConfig implements Condition { public class SystemEnvConfig implements Condition {
@Value("${spring.profiles.active}") @Value("${spring.profiles.active}")
private String systemEnvironment; private String systemEnvironment;
@ -32,18 +32,18 @@ public class SystemEnvironmentConfig implements Condition {
@Override @Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) { public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
String property = conditionContext.getEnvironment().getProperty("spring.profiles.active"); String property = conditionContext.getEnvironment().getProperty("spring.profiles.active");
return StringUtils.isNotBlank(property) && !SystemEnvironmentEnum.PROD.equalsValue(property); return StringUtils.isNotBlank(property) && !SystemEnvEnum.PROD.equalsValue(property);
} }
@Bean @Bean
public SystemEnvironment initEnvironment() { public SystemEnv initEnvironment() {
SystemEnvironmentEnum currentEnvironment = SmartEnumUtil.getEnumByValue(systemEnvironment, SystemEnvironmentEnum.class); SystemEnvEnum currentEnv = SmartEnumUtil.getEnumByValue(systemEnvironment, SystemEnvEnum.class);
if (currentEnvironment == null) { if (currentEnv == null) {
throw new ExceptionInInitializerError("无法获取当前环境!请在 application.yaml 配置参数spring.profiles.active"); throw new ExceptionInInitializerError("无法获取当前环境!请在 application.yaml 配置参数spring.profiles.active");
} }
if (StringUtils.isBlank(projectName)) { if (StringUtils.isBlank(projectName)) {
throw new ExceptionInInitializerError("无法获取当前项目名称!请在 application.yaml 配置参数project.name"); throw new ExceptionInInitializerError("无法获取当前项目名称!请在 application.yaml 配置参数project.name");
} }
return new SystemEnvironment(currentEnvironment == SystemEnvironmentEnum.PROD, projectName, currentEnvironment); return new SystemEnv(currentEnv == SystemEnvEnum.PROD, projectName, currentEnv);
} }
} }

View File

@ -5,7 +5,7 @@ import lombok.extern.slf4j.Slf4j;
import net.lab1024.sa.common.common.code.SystemErrorCode; import net.lab1024.sa.common.common.code.SystemErrorCode;
import net.lab1024.sa.common.common.code.UserErrorCode; import net.lab1024.sa.common.common.code.UserErrorCode;
import net.lab1024.sa.common.common.domain.ResponseDTO; import net.lab1024.sa.common.common.domain.ResponseDTO;
import net.lab1024.sa.common.common.domain.SystemEnvironment; import net.lab1024.sa.common.common.domain.SystemEnv;
import net.lab1024.sa.common.common.exception.BusinessException; import net.lab1024.sa.common.common.exception.BusinessException;
import org.springframework.beans.TypeMismatchException; import org.springframework.beans.TypeMismatchException;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -37,7 +37,7 @@ import java.util.stream.Collectors;
public class GlobalExceptionHandler { public class GlobalExceptionHandler {
@Autowired @Autowired
private SystemEnvironment systemEnvironment; private SystemEnv systemEnvironment;
/** /**
* json 格式错误 缺少请求体 * json 格式错误 缺少请求体

View File

@ -2,10 +2,9 @@ package net.lab1024.sa.common.module.support.captcha;
import com.google.code.kaptcha.impl.DefaultKaptcha; import com.google.code.kaptcha.impl.DefaultKaptcha;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.lab1024.sa.common.common.code.UserErrorCode;
import net.lab1024.sa.common.common.constant.StringConst; import net.lab1024.sa.common.common.constant.StringConst;
import net.lab1024.sa.common.common.domain.ResponseDTO; import net.lab1024.sa.common.common.domain.ResponseDTO;
import net.lab1024.sa.common.common.domain.SystemEnvironment; import net.lab1024.sa.common.common.domain.SystemEnv;
import net.lab1024.sa.common.common.exception.BusinessException; import net.lab1024.sa.common.common.exception.BusinessException;
import net.lab1024.sa.common.constant.RedisKeyConst; import net.lab1024.sa.common.constant.RedisKeyConst;
import net.lab1024.sa.common.module.support.captcha.domain.CaptchaForm; import net.lab1024.sa.common.module.support.captcha.domain.CaptchaForm;
@ -43,7 +42,7 @@ public class CaptchaService {
@Autowired @Autowired
private DefaultKaptcha defaultKaptcha; private DefaultKaptcha defaultKaptcha;
@Autowired @Autowired
private SystemEnvironment systemEnvironment; private SystemEnv systemEnvironment;
@Autowired @Autowired
private RedisService redisService; private RedisService redisService;

View File

@ -1,8 +1,8 @@
package net.lab1024.sa.common.module.support.redis; package net.lab1024.sa.common.module.support.redis;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import net.lab1024.sa.common.common.domain.SystemEnvironment; import net.lab1024.sa.common.common.domain.SystemEnv;
import net.lab1024.sa.common.common.enumeration.SystemEnvironmentEnum; import net.lab1024.sa.common.common.enumeration.SystemEnvEnum;
import net.lab1024.sa.common.common.util.SmartStringUtil; import net.lab1024.sa.common.common.util.SmartStringUtil;
import net.lab1024.sa.common.constant.RedisKeyConst; import net.lab1024.sa.common.constant.RedisKeyConst;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -52,7 +52,7 @@ public class RedisService {
private SetOperations<String, Object> redisSetOperations; private SetOperations<String, Object> redisSetOperations;
@Autowired @Autowired
private SystemEnvironment systemEnvironment; private SystemEnv systemEnvironment;
/** /**
@ -62,7 +62,7 @@ public class RedisService {
* @return * @return
*/ */
public String generateRedisKey(String prefix, String key) { public String generateRedisKey(String prefix, String key) {
SystemEnvironmentEnum currentEnvironment = systemEnvironment.getCurrentEnvironment(); SystemEnvEnum currentEnvironment = systemEnvironment.getCurrentEnv();
return systemEnvironment.getProjectName() + RedisKeyConst.SEPARATOR + currentEnvironment.getValue() + RedisKeyConst.SEPARATOR + prefix + key; return systemEnvironment.getProjectName() + RedisKeyConst.SEPARATOR + currentEnvironment.getValue() + RedisKeyConst.SEPARATOR + prefix + key;
} }

View File

@ -46,7 +46,7 @@ public class TokenService {
SaLoginModel loginModel = new SaLoginModel(); SaLoginModel loginModel = new SaLoginModel();
// 此次登录的客户端设备类型, 用于[同端互斥登录]时指定此次登录的设备类型 // 此次登录的客户端设备类型, 用于[同端互斥登录]时指定此次登录的设备类型
loginModel.setDevice(String.valueOf(loginDeviceEnum.getDesc())); loginModel.setDevice(String.valueOf(loginDeviceEnum.getDesc()));
// 扩展参数 // 扩展参数 只在 jwt 模式下 有效
loginModel.setExtra(EXTRA_KEY_USER_NAME, userName); loginModel.setExtra(EXTRA_KEY_USER_NAME, userName);
loginModel.setExtra(EXTRA_KEY_USER_TYPE, userTypeEnum.getValue()); loginModel.setExtra(EXTRA_KEY_USER_TYPE, userTypeEnum.getValue());