From 64637e6dfe801a7fb5250791fe1abd9a65c031f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=AD=E5=A6=82?= <8775@163.com> Date: Wed, 13 Nov 2024 10:36:58 +0800 Subject: [PATCH] 5.0 --- .../common/annotation/NoToken.java | 17 +++ .../{ => common}/config/Configs.java | 5 +- .../common/{ => config}/IConfig.java | 2 +- .../common/{ => context}/SpringContext.java | 2 +- .../common/context/UserContext.java | 117 +++++++++++++++++ .../adminbackend/common/fill/AddByFill.java | 50 ++++++++ .../common/fill/UpdateByFill.java | 22 ++++ .../adminbackend/common/{ => user}/User.java | 2 +- .../{ => common}/util/CopyUtil.java | 2 +- .../{ => common}/util/GenerateUtil.java | 2 +- .../adminbackend/{ => common}/util/IdGen.java | 2 +- .../{ => common}/util/JwtUtil.java | 2 +- .../{ => common}/util/PasswordUtil.java | 2 +- .../common/{ => util}/RSATool.java | 2 +- .../adminbackend/common/util/RequestUtil.java | 118 ++++++++++++++++++ .../adminbackend/common/util/SystemUtil.java | 32 +++++ .../config/SopAdminConfiguration.java | 81 +++++++++++- .../controller/isv/IsvInfoController.java | 4 +- .../isv/PermGroupPermissionController.java | 2 +- .../isv/PermIsvGroupController.java | 4 +- .../controller/serve/ApiInfoController.java | 2 +- .../controller/sys/LoginController.java | 4 +- .../controller/sys/SysConfigController.java | 43 +++++++ .../sys/req/ConfigSettingParam.java | 26 ++++ .../sop/adminbackend/dao/entity/ApiInfo.java | 9 ++ .../sop/adminbackend/dao/entity/IsvInfo.java | 8 ++ .../sop/adminbackend/dao/entity/IsvKeys.java | 8 ++ .../adminbackend/dao/entity/PermGroup.java | 8 ++ .../dao/entity/PermGroupPermission.java | 8 ++ .../adminbackend/dao/entity/PermIsvGroup.java | 8 ++ .../adminbackend/dao/entity/SysAdminUser.java | 8 ++ .../adminbackend/dao/entity/SysConfig.java | 8 ++ .../interceptor/LoginInterceptor.java | 45 +++++++ .../service/isv/IsvInfoService.java | 8 +- .../service/isv/IsvKeysService.java | 4 +- .../isv/PermGroupPermissionService.java | 2 +- .../service/serve/ApiInfoService.java | 2 +- .../service/sys/SysAdminUserService.java | 4 +- .../service/sys/SysConfigService.java | 9 +- .../service/sys/UpgradeService.java | 2 +- .../service/sys/dto/SystemConfigDTO.java | 3 - .../service/sys/login/LoginService.java | 8 +- .../service/sys/login/UserCacheManager.java | 2 +- .../service/sys/login/dto/LoginUser.java | 2 +- .../login/impl/DefaultUserCacheManager.java | 4 +- .../src/main/resources/application.properties | 2 + .../sop/support/exception/OpenException.java | 2 +- 47 files changed, 663 insertions(+), 46 deletions(-) create mode 100644 sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/annotation/NoToken.java rename sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/{ => common}/config/Configs.java (88%) rename sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/{ => config}/IConfig.java (70%) rename sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/{ => context}/SpringContext.java (92%) create mode 100644 sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/context/UserContext.java create mode 100644 sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/fill/AddByFill.java create mode 100644 sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/fill/UpdateByFill.java rename sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/{ => user}/User.java (84%) rename sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/{ => common}/util/CopyUtil.java (99%) rename sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/{ => common}/util/GenerateUtil.java (90%) rename sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/{ => common}/util/IdGen.java (99%) rename sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/{ => common}/util/JwtUtil.java (98%) rename sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/{ => common}/util/PasswordUtil.java (97%) rename sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/{ => util}/RSATool.java (99%) create mode 100644 sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/util/RequestUtil.java create mode 100644 sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/util/SystemUtil.java create mode 100644 sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/sys/SysConfigController.java create mode 100644 sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/sys/req/ConfigSettingParam.java create mode 100644 sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/interceptor/LoginInterceptor.java diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/annotation/NoToken.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/annotation/NoToken.java new file mode 100644 index 00000000..5647c9e2 --- /dev/null +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/annotation/NoToken.java @@ -0,0 +1,17 @@ +package com.gitee.sop.adminbackend.common.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 不需要登录验证 + * @author tanghc + */ +@Target({ElementType.TYPE, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface NoToken { +} diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/config/Configs.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/config/Configs.java similarity index 88% rename from sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/config/Configs.java rename to sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/config/Configs.java index e9429718..3dc3dddb 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/config/Configs.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/config/Configs.java @@ -1,7 +1,6 @@ -package com.gitee.sop.adminbackend.config; +package com.gitee.sop.adminbackend.common.config; -import com.gitee.sop.adminbackend.common.IConfig; -import com.gitee.sop.adminbackend.common.SpringContext; +import com.gitee.sop.adminbackend.common.context.SpringContext; import com.gitee.sop.adminbackend.common.enums.ConfigKeyEnum; import java.util.function.Supplier; diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/IConfig.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/config/IConfig.java similarity index 70% rename from sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/IConfig.java rename to sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/config/IConfig.java index 52ccf127..2809bce9 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/IConfig.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/config/IConfig.java @@ -1,4 +1,4 @@ -package com.gitee.sop.adminbackend.common; +package com.gitee.sop.adminbackend.common.config; public interface IConfig { diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/SpringContext.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/context/SpringContext.java similarity index 92% rename from sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/SpringContext.java rename to sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/context/SpringContext.java index ad5e3299..bd36675e 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/SpringContext.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/context/SpringContext.java @@ -1,4 +1,4 @@ -package com.gitee.sop.adminbackend.common; +package com.gitee.sop.adminbackend.common.context; import org.springframework.context.ApplicationContext; diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/context/UserContext.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/context/UserContext.java new file mode 100644 index 00000000..e39725a7 --- /dev/null +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/context/UserContext.java @@ -0,0 +1,117 @@ +package com.gitee.sop.adminbackend.common.context; + +import com.auth0.jwt.interfaces.Claim; +import com.gitee.sop.adminbackend.common.user.User; +import com.gitee.sop.adminbackend.common.config.Configs; +import com.gitee.sop.adminbackend.common.enums.ConfigKeyEnum; +import com.gitee.sop.adminbackend.common.exception.ErrorTokenException; +import com.gitee.sop.adminbackend.common.exception.JwtErrorException; +import com.gitee.sop.adminbackend.common.exception.JwtExpiredException; +import com.gitee.sop.adminbackend.common.exception.LoginFailureException; +import com.gitee.sop.adminbackend.service.sys.login.UserCacheManager; +import com.gitee.sop.adminbackend.common.util.JwtUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.math.NumberUtils; +import org.springframework.util.StringUtils; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import java.util.Locale; +import java.util.Map; +import java.util.function.Supplier; + +/** + * @author tanghc + */ +@Slf4j +public class UserContext { + + public static final String HEADER_AUTHORIZATION = "Authorization"; + public static final String JWT_PREFIX = "Bearer "; + + + private static Supplier tokenGetter = () -> { + HttpServletRequest request = ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getRequest(); + return getToken(request); + }; + + public static void setTokenGetter(Supplier tokenGetter) { + UserContext.tokenGetter = tokenGetter; + } + + /** + * 获取当前登录用户 + * + * @return 返回当前登录用户,没有返回null + */ + public static User getUser() { + String token = tokenGetter.get(); + try { + return getUser(token); + } catch (ErrorTokenException e) { + throw new LoginFailureException(); + } + } + + /** + * 获取当前登录用户 + * + * @return 返回当前登录用户,没有返回null + */ + public static User getUser(HttpServletRequest request) { + String token = getToken(request); + try { + return getUser(token); + } catch (ErrorTokenException e) { + throw new LoginFailureException(); + } + } + + public static String getToken(HttpServletRequest request) { + String token = request.getHeader(HEADER_AUTHORIZATION); + if (StringUtils.hasText(token) && token.startsWith(JWT_PREFIX)) { + return token.substring(JWT_PREFIX.length()); + } + return token; + } + + + /** + * 获取登录用户 + * + * @param token 格式:: + * @return 返回token对应的用户,没有返回null + */ + private static User getUser(String token) throws ErrorTokenException { + if (StringUtils.isEmpty(token)) { + return null; + } + String secret = Configs.getValue(ConfigKeyEnum.JWT_SECRET); + Map data; + // verify jwt + try { + data = JwtUtil.verifyJwt(token, secret); + } catch (JwtExpiredException | JwtErrorException e) { + log.error("jwt verify failed, token:{}, message:{}", token, e.getMessage(), e); + throw new ErrorTokenException(); + } + Claim id = data.get("id"); + long userId = NumberUtils.toLong(id.asString(), 0); + if (userId == 0) { + return null; + } + return SpringContext.getBean(UserCacheManager.class).getUser(userId); + } + + + @Deprecated + public static Locale getLocale() { + try { + HttpServletRequest request = ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getRequest(); + return request.getLocale(); + } catch (Exception e) { + return Locale.SIMPLIFIED_CHINESE; + } + } +} diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/fill/AddByFill.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/fill/AddByFill.java new file mode 100644 index 00000000..5ae8c308 --- /dev/null +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/fill/AddByFill.java @@ -0,0 +1,50 @@ +package com.gitee.sop.adminbackend.common.fill; + +import com.gitee.fastmybatis.core.handler.BaseFill; +import com.gitee.fastmybatis.core.handler.FillType; +import com.gitee.sop.adminbackend.common.context.UserContext; +import com.gitee.sop.adminbackend.common.user.User; + +import java.lang.reflect.Field; +import java.util.Objects; + +/** + * 保存到数据库自动设置添加人 + * + * @author 六如 + */ +public class AddByFill extends BaseFill { + + private static final String ADD_BY = "addBy"; + + @Override + public FillType getFillType() { + return FillType.INSERT; + } + + @Override + protected Object getFillValue(Long defaultValue) { + User user = UserContext.getUser(); + return user != null ? user.getUserId() : defaultValue; + } + + @Override + protected Long convertValue(Object columnValue) { + if (columnValue == null) { + return null; + } + if (columnValue instanceof Long) { + return (Long) columnValue; + } + return Long.parseLong(String.valueOf(columnValue)); + } + + protected String getTargetFieldName() { + return ADD_BY; + } + + @Override + public boolean match(Class entityClass, Field field, String columnName) { + return Objects.equals(getTargetFieldName(), field.getName()); + } +} diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/fill/UpdateByFill.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/fill/UpdateByFill.java new file mode 100644 index 00000000..fab24f71 --- /dev/null +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/fill/UpdateByFill.java @@ -0,0 +1,22 @@ +package com.gitee.sop.adminbackend.common.fill; + +import com.gitee.fastmybatis.core.handler.FillType; + +/** + * 保存到数据库自动设置修改人 + * @author 六如 + */ +public class UpdateByFill extends AddByFill { + + private static final String UPDATE_BY = "updateBy"; + + @Override + public FillType getFillType() { + return FillType.UPDATE; + } + + @Override + protected String getTargetFieldName() { + return UPDATE_BY; + } +} diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/User.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/user/User.java similarity index 84% rename from sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/User.java rename to sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/user/User.java index d2d6711d..137074fb 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/User.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/user/User.java @@ -1,4 +1,4 @@ -package com.gitee.sop.adminbackend.common; +package com.gitee.sop.adminbackend.common.user; /** * 登录用户信息 diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/util/CopyUtil.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/util/CopyUtil.java similarity index 99% rename from sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/util/CopyUtil.java rename to sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/util/CopyUtil.java index 21a8e570..4ec61f90 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/util/CopyUtil.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/util/CopyUtil.java @@ -1,4 +1,4 @@ -package com.gitee.sop.adminbackend.util; +package com.gitee.sop.adminbackend.common.util; import com.alibaba.fastjson2.JSON; import org.springframework.beans.BeanUtils; diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/util/GenerateUtil.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/util/GenerateUtil.java similarity index 90% rename from sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/util/GenerateUtil.java rename to sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/util/GenerateUtil.java index c94e31d7..c90bb0e7 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/util/GenerateUtil.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/util/GenerateUtil.java @@ -1,4 +1,4 @@ -package com.gitee.sop.adminbackend.util; +package com.gitee.sop.adminbackend.common.util; import lombok.extern.slf4j.Slf4j; import org.springframework.util.DigestUtils; diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/util/IdGen.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/util/IdGen.java similarity index 99% rename from sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/util/IdGen.java rename to sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/util/IdGen.java index 3425d6ee..298f0d8d 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/util/IdGen.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/util/IdGen.java @@ -1,4 +1,4 @@ -package com.gitee.sop.adminbackend.util; +package com.gitee.sop.adminbackend.common.util; import java.util.UUID; diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/util/JwtUtil.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/util/JwtUtil.java similarity index 98% rename from sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/util/JwtUtil.java rename to sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/util/JwtUtil.java index 3edc2011..f88ef2ce 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/util/JwtUtil.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/util/JwtUtil.java @@ -1,4 +1,4 @@ -package com.gitee.sop.adminbackend.util; +package com.gitee.sop.adminbackend.common.util; import com.auth0.jwt.JWT; import com.auth0.jwt.JWTCreator; diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/util/PasswordUtil.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/util/PasswordUtil.java similarity index 97% rename from sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/util/PasswordUtil.java rename to sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/util/PasswordUtil.java index c8716405..034ace3b 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/util/PasswordUtil.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/util/PasswordUtil.java @@ -1,4 +1,4 @@ -package com.gitee.sop.adminbackend.util; +package com.gitee.sop.adminbackend.common.util; import java.util.ArrayList; import java.util.Collections; diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/RSATool.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/util/RSATool.java similarity index 99% rename from sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/RSATool.java rename to sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/util/RSATool.java index 709d0673..b49a04e5 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/RSATool.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/util/RSATool.java @@ -1,4 +1,4 @@ -package com.gitee.sop.adminbackend.common; +package com.gitee.sop.adminbackend.common.util; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/util/RequestUtil.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/util/RequestUtil.java new file mode 100644 index 00000000..57ef6c82 --- /dev/null +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/util/RequestUtil.java @@ -0,0 +1,118 @@ +package com.gitee.sop.adminbackend.common.util; + +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.IOUtils; +import org.springframework.util.StringUtils; +import org.springframework.web.util.UriUtils; + +import javax.servlet.ServletInputStream; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.nio.charset.StandardCharsets; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +/** + * @author tanghc + */ +@Slf4j +public class RequestUtil { + + private static final String IP_UNKNOWN = "unknown"; + private static final String IP_LOCAL = "127.0.0.1"; + private static final int IP_LEN = 15; + + /** + * 获取表单中的字段,请求类型是application/x-www-form-urlencoded + * + * @param request request + * @return 返回字段内容 + */ + public static Map getFormFields(HttpServletRequest request) { + String query; + try { + ServletInputStream inputStream = request.getInputStream(); + query = IOUtils.toString(inputStream, request.getCharacterEncoding()); + } catch (IOException e) { + log.error("获取form参数失败", e); + throw new RuntimeException("请求失败"); + } + return parseQueryString(query); + } + + public static Map parseQueryString(String query) { + if (StringUtils.isEmpty(query)) { + return Collections.emptyMap(); + } + query = StringUtils.trimLeadingCharacter(query, '?'); + String[] pairs = query.split("&"); + Map form = new HashMap<>(pairs.length * 2); + for (String pair : pairs) { + String[] param = pair.split("="); + String key = param[0]; + String value = UriUtils.decode(param[1], StandardCharsets.UTF_8); + form.put(key, value); + } + return form; + } + + /** + * 获取上传文件表单中的字段,排除query参数 + * + * @param request request + * @return 返回字段内容 + */ + public static Map getMultipartFields(HttpServletRequest request) { + Map queryParams = parseQueryString(request.getQueryString()); + Map uploadParams = new HashMap<>(16); + Set queryKeys = queryParams.keySet(); + request.getParameterMap().forEach((key, value) -> { + // 排除query param + if (!queryKeys.contains(key)) { + uploadParams.put(key, value[0]); + } + }); + return uploadParams; + } + + /** + * 获取客户端IP + * + * @param request request + * @return 返回ip + */ + public static String getIP(HttpServletRequest request) { + String ipAddress = request.getHeader("x-forwarded-for"); + if (ipAddress == null || ipAddress.length() == 0 || IP_UNKNOWN.equalsIgnoreCase(ipAddress)) { + ipAddress = request.getHeader("Proxy-Client-IP"); + } + if (ipAddress == null || ipAddress.length() == 0 || IP_UNKNOWN.equalsIgnoreCase(ipAddress)) { + ipAddress = request.getHeader("WL-Proxy-Client-IP"); + } + if (ipAddress == null || ipAddress.length() == 0 || IP_UNKNOWN.equalsIgnoreCase(ipAddress)) { + ipAddress = request.getRemoteAddr(); + if (IP_LOCAL.equals(ipAddress)) { + // 根据网卡取本机配置的IP + try { + InetAddress inet = InetAddress.getLocalHost(); + ipAddress = inet.getHostAddress(); + } catch (UnknownHostException e) { + // ignore + } + } + + } + + // 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割 + if (ipAddress != null && ipAddress.length() > IP_LEN) { + if (ipAddress.indexOf(",") > 0) { + ipAddress = ipAddress.substring(0, ipAddress.indexOf(",")); + } + } + return ipAddress; + } +} diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/util/SystemUtil.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/util/SystemUtil.java new file mode 100644 index 00000000..35dacb33 --- /dev/null +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/util/SystemUtil.java @@ -0,0 +1,32 @@ +package com.gitee.sop.adminbackend.common.util; + +import org.springframework.boot.system.ApplicationHome; + +import java.io.File; + +/** + * @author tanghc + */ +public class SystemUtil { + + /** + * 获取程序执行目录,即jar包所在的目录。此方法只在部署后有用,开发模式下,这里返回target路径 + * @return 返回路径 + */ + public static String getBinPath() { + ApplicationHome applicationHome = new ApplicationHome(SystemUtil.class); + File file = applicationHome.getSource(); + if (file == null) { + return getUserDir(); + } + return file.getParentFile().toString(); + } + + public static String getUserDir() { + return System.getProperty("user.dir"); + } + + public static String getUserHome() { + return System.getProperty("user.home"); + } +} diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/config/SopAdminConfiguration.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/config/SopAdminConfiguration.java index 2da5e897..ea9d0228 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/config/SopAdminConfiguration.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/config/SopAdminConfiguration.java @@ -1,18 +1,95 @@ package com.gitee.sop.adminbackend.config; -import com.gitee.sop.adminbackend.common.SpringContext; +import com.gitee.sop.adminbackend.common.context.SpringContext; +import com.gitee.sop.adminbackend.common.util.SystemUtil; +import com.gitee.sop.adminbackend.interceptor.LoginInterceptor; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeansException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.Environment; +import org.springframework.util.StringUtils; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; /** * @author 六如 */ @Configuration -public class SopAdminConfiguration implements ApplicationContextAware { +@Slf4j +public class SopAdminConfiguration implements ApplicationContextAware, WebMvcConfigurer { + + @Value("${torna.front-location:}") + private String frontLocation; + @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { SpringContext.setApplicationContext(applicationContext); } + + /** + * 配置拦截器 + * + * @param registry + */ + @Override + public void addInterceptors(InterceptorRegistry registry) { + String[] excludes = { + // 排除前端资源 + "/", "/*.html", "/*.ico", "/static/**" + }; + registry.addInterceptor(new LoginInterceptor()) + .excludePathPatterns(excludes); + } + + /** + * 跨域设置 + */ + @Bean + public CorsFilter corsFilter( + @Value("${torna.cors.allowed-origin-pattern:*}") String allowedOriginPattern, + @Value("${torna.cors.allowed-header:*}") String allowedHeader + ) { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // SpringBoot升级2.4.0之后,跨域配置中的.allowedOrigins不再可用,改成addAllowedOriginPattern + corsConfiguration.addAllowedOriginPattern(allowedOriginPattern); + corsConfiguration.addAllowedHeader(allowedHeader); + corsConfiguration.addAllowedMethod(CorsConfiguration.ALL); + corsConfiguration.addExposedHeader("Content-Disposition"); + corsConfiguration.setAllowCredentials(true); + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", corsConfiguration); + return new CorsFilter(source); + } + + + /** + * 配置静态资源 + * + * @param registry + */ + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + String homeDir = SystemUtil.getBinPath(); + String frontRoot; + if (StringUtils.hasText(frontLocation)) { + frontRoot = StringUtils.trimTrailingCharacter(frontLocation, '/'); + } else { + frontRoot = homeDir + "/dist"; + } + log.info("前端资源目录:{}", frontRoot); + String frontLocation = "file:" + frontRoot; + registry.addResourceHandler("/index.html").addResourceLocations(frontLocation + "/index.html"); + registry.addResourceHandler("/favicon.ico").addResourceLocations(frontLocation + "/favicon.ico"); + registry.addResourceHandler("/static/**").addResourceLocations(frontLocation + "/static/"); + } + } diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/isv/IsvInfoController.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/isv/IsvInfoController.java index 9b9573e1..dfbd4d78 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/isv/IsvInfoController.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/isv/IsvInfoController.java @@ -3,7 +3,7 @@ package com.gitee.sop.adminbackend.controller.isv; import com.gitee.fastmybatis.core.PageInfo; import com.gitee.fastmybatis.core.query.LambdaQuery; import com.gitee.fastmybatis.core.query.param.PageParam; -import com.gitee.sop.adminbackend.common.RSATool; +import com.gitee.sop.adminbackend.common.util.RSATool; import com.gitee.sop.adminbackend.common.dto.StatusUpdateDTO; import com.gitee.sop.adminbackend.common.req.StatusUpdateParam; import com.gitee.sop.adminbackend.common.resp.Result; @@ -19,7 +19,7 @@ import com.gitee.sop.adminbackend.service.isv.dto.IsvInfoDTO; import com.gitee.sop.adminbackend.service.isv.dto.IsvInfoUpdateDTO; import com.gitee.sop.adminbackend.service.isv.dto.IsvInfoUpdateKeysDTO; import com.gitee.sop.adminbackend.service.isv.dto.IsvKeysDTO; -import com.gitee.sop.adminbackend.util.CopyUtil; +import com.gitee.sop.adminbackend.common.util.CopyUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/isv/PermGroupPermissionController.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/isv/PermGroupPermissionController.java index f8b2df6a..1b4c9d62 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/isv/PermGroupPermissionController.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/isv/PermGroupPermissionController.java @@ -8,7 +8,7 @@ import com.gitee.sop.adminbackend.controller.isv.req.PermGroupPermissionParam; import com.gitee.sop.adminbackend.dao.entity.ApiInfo; import com.gitee.sop.adminbackend.service.isv.PermGroupPermissionService; import com.gitee.sop.adminbackend.service.isv.dto.PermGroupPermissionDTO; -import com.gitee.sop.adminbackend.util.CopyUtil; +import com.gitee.sop.adminbackend.common.util.CopyUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/isv/PermIsvGroupController.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/isv/PermIsvGroupController.java index 2e03a91f..6a85486e 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/isv/PermIsvGroupController.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/isv/PermIsvGroupController.java @@ -1,12 +1,12 @@ package com.gitee.sop.adminbackend.controller.isv; -import com.gitee.sop.adminbackend.common.SpringContext; +import com.gitee.sop.adminbackend.common.context.SpringContext; import com.gitee.sop.adminbackend.common.resp.Result; import com.gitee.sop.adminbackend.controller.isv.req.IsvGroupSettingParam; import com.gitee.sop.adminbackend.service.isv.PermIsvGroupService; import com.gitee.sop.adminbackend.service.isv.dto.IsvGroupSettingDTO; import com.gitee.sop.adminbackend.service.isv.event.ChangeIsvPermEvent; -import com.gitee.sop.adminbackend.util.CopyUtil; +import com.gitee.sop.adminbackend.common.util.CopyUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/serve/ApiInfoController.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/serve/ApiInfoController.java index 91c5b602..1c455436 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/serve/ApiInfoController.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/serve/ApiInfoController.java @@ -8,7 +8,7 @@ import com.gitee.sop.adminbackend.common.resp.Result; import com.gitee.sop.adminbackend.controller.serve.req.ApiInfoPageParam; import com.gitee.sop.adminbackend.dao.entity.ApiInfo; import com.gitee.sop.adminbackend.service.serve.ApiInfoService; -import com.gitee.sop.adminbackend.util.CopyUtil; +import com.gitee.sop.adminbackend.common.util.CopyUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/sys/LoginController.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/sys/LoginController.java index a0aa0d70..587d36b6 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/sys/LoginController.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/sys/LoginController.java @@ -1,5 +1,6 @@ package com.gitee.sop.adminbackend.controller.sys; +import com.gitee.sop.adminbackend.common.annotation.NoToken; import com.gitee.sop.adminbackend.common.resp.Result; import com.gitee.sop.adminbackend.controller.sys.req.LoginParam; import com.gitee.sop.adminbackend.controller.sys.resp.LoginResultVO; @@ -7,7 +8,7 @@ import com.gitee.sop.adminbackend.service.sys.login.LoginService; import com.gitee.sop.adminbackend.service.sys.login.dto.LoginDTO; import com.gitee.sop.adminbackend.service.sys.login.dto.LoginUser; import com.gitee.sop.adminbackend.service.sys.login.enums.RegTypeEnum; -import com.gitee.sop.adminbackend.util.CopyUtil; +import com.gitee.sop.adminbackend.common.util.CopyUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; @@ -34,6 +35,7 @@ public class LoginController { * @return */ @PostMapping("login") + @NoToken public Result login(@Validated @RequestBody LoginParam param) { LoginDTO loginDTO = new LoginDTO(); loginDTO.setUsername(param.getUsername()); diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/sys/SysConfigController.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/sys/SysConfigController.java new file mode 100644 index 00000000..4067c531 --- /dev/null +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/sys/SysConfigController.java @@ -0,0 +1,43 @@ +package com.gitee.sop.adminbackend.controller.sys; + +import com.gitee.fastmybatis.core.PageInfo; +import com.gitee.fastmybatis.core.query.LambdaQuery; +import com.gitee.fastmybatis.core.query.param.PageParam; +import com.gitee.sop.adminbackend.common.req.IdParam; +import com.gitee.sop.adminbackend.common.resp.Result; +import com.gitee.sop.adminbackend.controller.sys.req.ConfigSettingParam; +import com.gitee.sop.adminbackend.dao.entity.SysConfig; +import com.gitee.sop.adminbackend.service.sys.SysConfigService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * @author 六如 + */ +@RestController +@RequestMapping("sys/config") +public class SysConfigController { + + @Resource + private SysConfigService sysConfigService; + + /** + * 保存配置 + * + * @param param param + */ + @PostMapping("/save") + public Result add(@Validated @RequestBody ConfigSettingParam param) { + // 返回添加后的主键值 + return Result.ok(1); + } + + + +} diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/sys/req/ConfigSettingParam.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/sys/req/ConfigSettingParam.java new file mode 100644 index 00000000..444ea27c --- /dev/null +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/sys/req/ConfigSettingParam.java @@ -0,0 +1,26 @@ +package com.gitee.sop.adminbackend.controller.sys.req; + +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import java.util.List; + +/** + * @author 六如 + */ +@Data +public class ConfigSettingParam { + + @NotEmpty + private List items; + + @Data + public static class Config { + private String configKey; + + private String configValue; + + private String remark; + } + +} diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/entity/ApiInfo.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/entity/ApiInfo.java index b6582b5a..6d325d46 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/entity/ApiInfo.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/entity/ApiInfo.java @@ -98,5 +98,14 @@ public class ApiInfo { */ private LocalDateTime updateTime; + /** + * 创建人id + */ + private Long addBy; + + /** + * 最后更新人id + */ + private Long updateBy; } diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/entity/IsvInfo.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/entity/IsvInfo.java index a66e264a..c192eb44 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/entity/IsvInfo.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/entity/IsvInfo.java @@ -48,5 +48,13 @@ public class IsvInfo { */ private LocalDateTime updateTime; + /** + * 创建人id + */ + private Long addBy; + /** + * 最后更新人id + */ + private Long updateBy; } diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/entity/IsvKeys.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/entity/IsvKeys.java index 0fd54f9d..177a29c0 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/entity/IsvKeys.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/entity/IsvKeys.java @@ -63,5 +63,13 @@ public class IsvKeys { */ private LocalDateTime updateTime; + /** + * 创建人id + */ + private Long addBy; + /** + * 最后更新人id + */ + private Long updateBy; } diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/entity/PermGroup.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/entity/PermGroup.java index 48d056c9..cb49d547 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/entity/PermGroup.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/entity/PermGroup.java @@ -44,5 +44,13 @@ public class PermGroup { */ private LocalDateTime updateTime; + /** + * 创建人id + */ + private Long addBy; + /** + * 最后更新人id + */ + private Long updateBy; } diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/entity/PermGroupPermission.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/entity/PermGroupPermission.java index 7f0ee63c..dc0ec9b7 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/entity/PermGroupPermission.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/entity/PermGroupPermission.java @@ -43,5 +43,13 @@ public class PermGroupPermission { */ private LocalDateTime updateTime; + /** + * 创建人id + */ + private Long addBy; + /** + * 最后更新人id + */ + private Long updateBy; } diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/entity/PermIsvGroup.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/entity/PermIsvGroup.java index 30dcd468..52868ab0 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/entity/PermIsvGroup.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/entity/PermIsvGroup.java @@ -34,5 +34,13 @@ public class PermIsvGroup { private LocalDateTime updateTime; + /** + * 创建人id + */ + private Long addBy; + /** + * 最后更新人id + */ + private Long updateBy; } diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/entity/SysAdminUser.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/entity/SysAdminUser.java index dafc5e48..dc299104 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/entity/SysAdminUser.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/entity/SysAdminUser.java @@ -68,5 +68,13 @@ public class SysAdminUser { */ private LocalDateTime updateTime; + /** + * 创建人id + */ + private Long addBy; + /** + * 最后更新人id + */ + private Long updateBy; } diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/entity/SysConfig.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/entity/SysConfig.java index 01cd81b1..53b716af 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/entity/SysConfig.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/entity/SysConfig.java @@ -33,5 +33,13 @@ public class SysConfig { private LocalDateTime updateTime; + /** + * 创建人id + */ + private Long addBy; + /** + * 最后更新人id + */ + private Long updateBy; } diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/interceptor/LoginInterceptor.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/interceptor/LoginInterceptor.java new file mode 100644 index 00000000..e17117e7 --- /dev/null +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/interceptor/LoginInterceptor.java @@ -0,0 +1,45 @@ +package com.gitee.sop.adminbackend.interceptor; + +import com.gitee.sop.adminbackend.common.annotation.NoToken; +import com.gitee.sop.adminbackend.common.enums.StatusEnum; +import com.gitee.sop.adminbackend.common.user.User; +import com.gitee.sop.adminbackend.common.context.UserContext; +import com.gitee.sop.adminbackend.common.exception.LoginFailureException; +import com.gitee.sop.adminbackend.common.util.RequestUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.AnnotationUtils; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.HandlerInterceptor; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * @author tanghc + */ +@Slf4j +public class LoginInterceptor implements HandlerInterceptor { + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + if (!(handler instanceof HandlerMethod)) { + return true; + } + HandlerMethod handlerMethod = (HandlerMethod) handler; + NoToken noLogin = handlerMethod.getMethodAnnotation(NoToken.class); + if (noLogin != null) { + return true; + } + noLogin = AnnotationUtils.findAnnotation(handlerMethod.getBeanType(), NoToken.class); + if (noLogin != null) { + return true; + } + User user = UserContext.getUser(request); + if (user == null || StatusEnum.of(user.getStatus()) == StatusEnum.DISABLED) { + log.error("登录失败, 客户端ip:{}, uri:{}", RequestUtil.getIP(request), request.getRequestURI()); + throw new LoginFailureException("登录失败"); + } + return true; + } + +} diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/isv/IsvInfoService.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/isv/IsvInfoService.java index df05b236..0a0f3edd 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/isv/IsvInfoService.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/isv/IsvInfoService.java @@ -3,8 +3,8 @@ package com.gitee.sop.adminbackend.service.isv; import com.gitee.fastmybatis.core.PageInfo; import com.gitee.fastmybatis.core.query.LambdaQuery; import com.gitee.fastmybatis.core.support.LambdaService; -import com.gitee.sop.adminbackend.common.RSATool; -import com.gitee.sop.adminbackend.common.SpringContext; +import com.gitee.sop.adminbackend.common.util.RSATool; +import com.gitee.sop.adminbackend.common.context.SpringContext; import com.gitee.sop.adminbackend.common.dto.StatusUpdateDTO; import com.gitee.sop.adminbackend.common.enums.StatusEnum; import com.gitee.sop.adminbackend.common.enums.YesOrNoEnum; @@ -17,8 +17,8 @@ import com.gitee.sop.adminbackend.service.isv.dto.IsvInfoUpdateDTO; import com.gitee.sop.adminbackend.service.isv.dto.IsvInfoUpdateKeysDTO; import com.gitee.sop.adminbackend.service.isv.dto.IsvKeysDTO; import com.gitee.sop.adminbackend.service.isv.event.ChangeIsvInfoEvent; -import com.gitee.sop.adminbackend.util.CopyUtil; -import com.gitee.sop.adminbackend.util.IdGen; +import com.gitee.sop.adminbackend.common.util.CopyUtil; +import com.gitee.sop.adminbackend.common.util.IdGen; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/isv/IsvKeysService.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/isv/IsvKeysService.java index 5ede6cf7..17689727 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/isv/IsvKeysService.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/isv/IsvKeysService.java @@ -1,12 +1,12 @@ package com.gitee.sop.adminbackend.service.isv; import com.gitee.fastmybatis.core.support.LambdaService; -import com.gitee.sop.adminbackend.common.SpringContext; +import com.gitee.sop.adminbackend.common.context.SpringContext; import com.gitee.sop.adminbackend.dao.entity.IsvKeys; import com.gitee.sop.adminbackend.dao.mapper.IsvKeysMapper; import com.gitee.sop.adminbackend.service.isv.dto.IsvInfoUpdateKeysDTO; import com.gitee.sop.adminbackend.service.isv.event.ChangeIsvKeyEvent; -import com.gitee.sop.adminbackend.util.CopyUtil; +import com.gitee.sop.adminbackend.common.util.CopyUtil; import org.springframework.stereotype.Service; import java.util.Collections; diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/isv/PermGroupPermissionService.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/isv/PermGroupPermissionService.java index 015af2e8..cebc8110 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/isv/PermGroupPermissionService.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/isv/PermGroupPermissionService.java @@ -3,7 +3,7 @@ package com.gitee.sop.adminbackend.service.isv; import com.gitee.fastmybatis.core.PageInfo; import com.gitee.fastmybatis.core.query.LambdaQuery; import com.gitee.fastmybatis.core.support.LambdaService; -import com.gitee.sop.adminbackend.common.SpringContext; +import com.gitee.sop.adminbackend.common.context.SpringContext; import com.gitee.sop.adminbackend.dao.entity.ApiInfo; import com.gitee.sop.adminbackend.dao.entity.PermGroupPermission; import com.gitee.sop.adminbackend.dao.entity.PermIsvGroup; diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/serve/ApiInfoService.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/serve/ApiInfoService.java index 83a24428..7fa0fb2b 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/serve/ApiInfoService.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/serve/ApiInfoService.java @@ -1,7 +1,7 @@ package com.gitee.sop.adminbackend.service.serve; import com.gitee.fastmybatis.core.support.LambdaService; -import com.gitee.sop.adminbackend.common.SpringContext; +import com.gitee.sop.adminbackend.common.context.SpringContext; import com.gitee.sop.adminbackend.common.dto.StatusUpdateDTO; import com.gitee.sop.adminbackend.dao.entity.ApiInfo; import com.gitee.sop.adminbackend.dao.mapper.ApiInfoMapper; diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/sys/SysAdminUserService.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/sys/SysAdminUserService.java index d354ee86..e9a3e21c 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/sys/SysAdminUserService.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/sys/SysAdminUserService.java @@ -2,10 +2,10 @@ package com.gitee.sop.adminbackend.service.sys; import com.gitee.fastmybatis.core.support.LambdaService; import com.gitee.sop.adminbackend.common.enums.ConfigKeyEnum; -import com.gitee.sop.adminbackend.config.Configs; +import com.gitee.sop.adminbackend.common.config.Configs; import com.gitee.sop.adminbackend.dao.entity.SysAdminUser; import com.gitee.sop.adminbackend.dao.mapper.SysAdminUserMapper; -import com.gitee.sop.adminbackend.util.GenerateUtil; +import com.gitee.sop.adminbackend.common.util.GenerateUtil; import org.springframework.stereotype.Service; diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/sys/SysConfigService.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/sys/SysConfigService.java index c6c018f6..e578e293 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/sys/SysConfigService.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/sys/SysConfigService.java @@ -1,11 +1,11 @@ package com.gitee.sop.adminbackend.service.sys; import com.gitee.fastmybatis.core.support.BaseLambdaService; -import com.gitee.sop.adminbackend.common.IConfig; +import com.gitee.sop.adminbackend.common.config.IConfig; import com.gitee.sop.adminbackend.dao.entity.SysConfig; import com.gitee.sop.adminbackend.dao.mapper.SysConfigMapper; import com.gitee.sop.adminbackend.service.sys.dto.SystemConfigDTO; -import com.gitee.sop.adminbackend.util.CopyUtil; +import com.gitee.sop.adminbackend.common.util.CopyUtil; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; @@ -13,6 +13,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.stereotype.Service; +import java.util.Collection; import java.util.Objects; import java.util.Optional; import java.util.concurrent.TimeUnit; @@ -36,6 +37,10 @@ public class SysConfigService extends BaseLambdaService configs) { + configs.forEach(this::setConfig); + } + public String getRawValue(String key) { return this.query() .eq(SysConfig::getConfigKey, key) diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/sys/UpgradeService.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/sys/UpgradeService.java index cb5a960a..8cdc10c6 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/sys/UpgradeService.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/sys/UpgradeService.java @@ -4,7 +4,7 @@ import com.gitee.sop.adminbackend.common.enums.ConfigKeyEnum; import com.gitee.sop.adminbackend.dao.entity.SysAdminUser; import com.gitee.sop.adminbackend.dao.mapper.UpgradeMapper; import com.gitee.sop.adminbackend.service.sys.login.enums.RegTypeEnum; -import com.gitee.sop.adminbackend.util.PasswordUtil; +import com.gitee.sop.adminbackend.common.util.PasswordUtil; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/sys/dto/SystemConfigDTO.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/sys/dto/SystemConfigDTO.java index 7bd4cfab..8f97b23a 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/sys/dto/SystemConfigDTO.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/sys/dto/SystemConfigDTO.java @@ -7,12 +7,9 @@ import lombok.Data; */ @Data public class SystemConfigDTO { - /** 数据库字段:config_key */ private String configKey; - /** 数据库字段:config_value */ private String configValue; - /** 数据库字段:remark */ private String remark; } diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/sys/login/LoginService.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/sys/login/LoginService.java index 792a6d69..1399bf09 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/sys/login/LoginService.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/sys/login/LoginService.java @@ -4,7 +4,7 @@ import com.alibaba.nacos.shaded.com.google.common.collect.Sets; import com.gitee.sop.adminbackend.common.enums.ConfigKeyEnum; import com.gitee.sop.adminbackend.common.enums.StatusEnum; import com.gitee.sop.adminbackend.common.exception.BizException; -import com.gitee.sop.adminbackend.config.Configs; +import com.gitee.sop.adminbackend.common.config.Configs; import com.gitee.sop.adminbackend.dao.entity.SysAdminUser; import com.gitee.sop.adminbackend.service.sys.SysAdminUserService; import com.gitee.sop.adminbackend.service.sys.login.dto.LoginDTO; @@ -12,9 +12,9 @@ import com.gitee.sop.adminbackend.service.sys.login.dto.LoginForm; import com.gitee.sop.adminbackend.service.sys.login.dto.LoginResult; import com.gitee.sop.adminbackend.service.sys.login.dto.LoginUser; import com.gitee.sop.adminbackend.service.sys.login.enums.RegTypeEnum; -import com.gitee.sop.adminbackend.util.CopyUtil; -import com.gitee.sop.adminbackend.util.GenerateUtil; -import com.gitee.sop.adminbackend.util.JwtUtil; +import com.gitee.sop.adminbackend.common.util.CopyUtil; +import com.gitee.sop.adminbackend.common.util.GenerateUtil; +import com.gitee.sop.adminbackend.common.util.JwtUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.math.NumberUtils; import org.springframework.beans.factory.annotation.Autowired; diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/sys/login/UserCacheManager.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/sys/login/UserCacheManager.java index 0befb3f1..53bbd22a 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/sys/login/UserCacheManager.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/sys/login/UserCacheManager.java @@ -1,6 +1,6 @@ package com.gitee.sop.adminbackend.service.sys.login; -import com.gitee.sop.adminbackend.common.User; +import com.gitee.sop.adminbackend.common.user.User; /** * @author 六如 diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/sys/login/dto/LoginUser.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/sys/login/dto/LoginUser.java index 50dfd25c..fb541b58 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/sys/login/dto/LoginUser.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/sys/login/dto/LoginUser.java @@ -1,6 +1,6 @@ package com.gitee.sop.adminbackend.service.sys.login.dto; -import com.gitee.sop.adminbackend.common.User; +import com.gitee.sop.adminbackend.common.user.User; import lombok.Data; import java.util.Set; diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/sys/login/impl/DefaultUserCacheManager.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/sys/login/impl/DefaultUserCacheManager.java index fb712e78..3368c735 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/sys/login/impl/DefaultUserCacheManager.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/sys/login/impl/DefaultUserCacheManager.java @@ -1,12 +1,12 @@ package com.gitee.sop.adminbackend.service.sys.login.impl; -import com.gitee.sop.adminbackend.common.User; +import com.gitee.sop.adminbackend.common.user.User; import com.gitee.sop.adminbackend.common.enums.StatusEnum; import com.gitee.sop.adminbackend.dao.entity.SysAdminUser; import com.gitee.sop.adminbackend.service.sys.SysAdminUserService; import com.gitee.sop.adminbackend.service.sys.login.UserCacheManager; import com.gitee.sop.adminbackend.service.sys.login.dto.LoginUser; -import com.gitee.sop.adminbackend.util.CopyUtil; +import com.gitee.sop.adminbackend.common.util.CopyUtil; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; diff --git a/sop-admin/sop-admin-backend/src/main/resources/application.properties b/sop-admin/sop-admin-backend/src/main/resources/application.properties index cb3b1f62..68a66b39 100644 --- a/sop-admin/sop-admin-backend/src/main/resources/application.properties +++ b/sop-admin/sop-admin-backend/src/main/resources/application.properties @@ -29,6 +29,8 @@ spring.datasource.password=${mysql.password} ####### mybatis config ####### mybatis.fill.com.gitee.fastmybatis.core.support.LocalDateTimeFillInsert=add_time mybatis.fill.com.gitee.fastmybatis.core.support.LocalDateTimeFillUpdate=update_time +mybatis.fill.com.gitee.sop.adminbackend.common.fill.AddByFill= +mybatis.fill.com.gitee.sop.adminbackend.common.fill.UpdateByFill= # mybatis config file mybatis.config-location=classpath:mybatis/mybatisConfig.xml mybatis.mapper-locations=classpath:mybatis/mapper/*.xml diff --git a/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/exception/OpenException.java b/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/exception/OpenException.java index 2b14d3f4..c3d6e595 100644 --- a/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/exception/OpenException.java +++ b/sop-support/sop-service-support/src/main/java/com/gitee/sop/support/exception/OpenException.java @@ -28,7 +28,7 @@ public class OpenException extends RuntimeException { } public OpenException(I18nMessage openError, Object... params) { - this(openError, Locale.SIMPLIFIED_CHINESE, params); + this(openError, Locale.ENGLISH, params); } public OpenException(String subCode, String subMsg, String solution) {