This commit is contained in:
六如
2024-11-13 10:36:58 +08:00
parent 7c5c47153e
commit 64637e6dfe
47 changed files with 663 additions and 46 deletions

View File

@@ -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 {
}

View File

@@ -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;

View File

@@ -1,4 +1,4 @@
package com.gitee.sop.adminbackend.common;
package com.gitee.sop.adminbackend.common.config;
public interface IConfig {

View File

@@ -1,4 +1,4 @@
package com.gitee.sop.adminbackend.common;
package com.gitee.sop.adminbackend.common.context;
import org.springframework.context.ApplicationContext;

View File

@@ -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<String> tokenGetter = () -> {
HttpServletRequest request = ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getRequest();
return getToken(request);
};
public static void setTokenGetter(Supplier<String> 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 格式:<userId>:<jwt>
* @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<String, Claim> 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;
}
}
}

View File

@@ -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<Long> {
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());
}
}

View File

@@ -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;
}
}

View File

@@ -1,4 +1,4 @@
package com.gitee.sop.adminbackend.common;
package com.gitee.sop.adminbackend.common.user;
/**
* 登录用户信息

View File

@@ -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;

View File

@@ -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;

View File

@@ -1,4 +1,4 @@
package com.gitee.sop.adminbackend.util;
package com.gitee.sop.adminbackend.common.util;
import java.util.UUID;

View File

@@ -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;

View File

@@ -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;

View File

@@ -1,4 +1,4 @@
package com.gitee.sop.adminbackend.common;
package com.gitee.sop.adminbackend.common.util;
import lombok.AllArgsConstructor;
import lombok.Getter;

View File

@@ -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<String, String> 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<String, String> parseQueryString(String query) {
if (StringUtils.isEmpty(query)) {
return Collections.emptyMap();
}
query = StringUtils.trimLeadingCharacter(query, '?');
String[] pairs = query.split("&");
Map<String, String> 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<String, String> getMultipartFields(HttpServletRequest request) {
Map<String, String> queryParams = parseQueryString(request.getQueryString());
Map<String, String> uploadParams = new HashMap<>(16);
Set<String> 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;
}
}

View File

@@ -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");
}
}

View File

@@ -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/");
}
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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<LoginResultVO> login(@Validated @RequestBody LoginParam param) {
LoginDTO loginDTO = new LoginDTO();
loginDTO.setUsername(param.getUsername());

View File

@@ -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<Integer> add(@Validated @RequestBody ConfigSettingParam param) {
// 返回添加后的主键值
return Result.ok(1);
}
}

View File

@@ -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<Config> items;
@Data
public static class Config {
private String configKey;
private String configValue;
private String remark;
}
}

View File

@@ -98,5 +98,14 @@ public class ApiInfo {
*/
private LocalDateTime updateTime;
/**
* 创建人id
*/
private Long addBy;
/**
* 最后更新人id
*/
private Long updateBy;
}

View File

@@ -48,5 +48,13 @@ public class IsvInfo {
*/
private LocalDateTime updateTime;
/**
* 创建人id
*/
private Long addBy;
/**
* 最后更新人id
*/
private Long updateBy;
}

View File

@@ -63,5 +63,13 @@ public class IsvKeys {
*/
private LocalDateTime updateTime;
/**
* 创建人id
*/
private Long addBy;
/**
* 最后更新人id
*/
private Long updateBy;
}

View File

@@ -44,5 +44,13 @@ public class PermGroup {
*/
private LocalDateTime updateTime;
/**
* 创建人id
*/
private Long addBy;
/**
* 最后更新人id
*/
private Long updateBy;
}

View File

@@ -43,5 +43,13 @@ public class PermGroupPermission {
*/
private LocalDateTime updateTime;
/**
* 创建人id
*/
private Long addBy;
/**
* 最后更新人id
*/
private Long updateBy;
}

View File

@@ -34,5 +34,13 @@ public class PermIsvGroup {
private LocalDateTime updateTime;
/**
* 创建人id
*/
private Long addBy;
/**
* 最后更新人id
*/
private Long updateBy;
}

View File

@@ -68,5 +68,13 @@ public class SysAdminUser {
*/
private LocalDateTime updateTime;
/**
* 创建人id
*/
private Long addBy;
/**
* 最后更新人id
*/
private Long updateBy;
}

View File

@@ -33,5 +33,13 @@ public class SysConfig {
private LocalDateTime updateTime;
/**
* 创建人id
*/
private Long addBy;
/**
* 最后更新人id
*/
private Long updateBy;
}

View File

@@ -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;
}
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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<SysConfig, SysConfigMapp
}
});
public void save(Collection<SystemConfigDTO> configs) {
configs.forEach(this::setConfig);
}
public String getRawValue(String key) {
return this.query()
.eq(SysConfig::getConfigKey, key)

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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 六如

View File

@@ -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;

View File

@@ -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;

View File

@@ -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

View File

@@ -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) {