mirror of
https://gitee.com/durcframework/SOP.git
synced 2025-08-11 12:56:28 +08:00
5.0
This commit is contained in:
@@ -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 {
|
||||
}
|
@@ -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;
|
@@ -1,4 +1,4 @@
|
||||
package com.gitee.sop.adminbackend.common;
|
||||
package com.gitee.sop.adminbackend.common.config;
|
||||
|
||||
public interface IConfig {
|
||||
|
@@ -1,4 +1,4 @@
|
||||
package com.gitee.sop.adminbackend.common;
|
||||
package com.gitee.sop.adminbackend.common.context;
|
||||
|
||||
import org.springframework.context.ApplicationContext;
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
@@ -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());
|
||||
}
|
||||
}
|
@@ -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;
|
||||
}
|
||||
}
|
@@ -1,4 +1,4 @@
|
||||
package com.gitee.sop.adminbackend.common;
|
||||
package com.gitee.sop.adminbackend.common.user;
|
||||
|
||||
/**
|
||||
* 登录用户信息
|
@@ -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;
|
@@ -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;
|
@@ -1,4 +1,4 @@
|
||||
package com.gitee.sop.adminbackend.util;
|
||||
package com.gitee.sop.adminbackend.common.util;
|
||||
|
||||
import java.util.UUID;
|
||||
|
@@ -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;
|
@@ -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;
|
@@ -1,4 +1,4 @@
|
||||
package com.gitee.sop.adminbackend.common;
|
||||
package com.gitee.sop.adminbackend.common.util;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
@@ -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;
|
||||
}
|
||||
}
|
@@ -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");
|
||||
}
|
||||
}
|
@@ -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/");
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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());
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
@@ -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;
|
||||
}
|
||||
|
||||
}
|
@@ -98,5 +98,14 @@ public class ApiInfo {
|
||||
*/
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
/**
|
||||
* 创建人id
|
||||
*/
|
||||
private Long addBy;
|
||||
|
||||
/**
|
||||
* 最后更新人id
|
||||
*/
|
||||
private Long updateBy;
|
||||
|
||||
}
|
||||
|
@@ -48,5 +48,13 @@ public class IsvInfo {
|
||||
*/
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
/**
|
||||
* 创建人id
|
||||
*/
|
||||
private Long addBy;
|
||||
|
||||
/**
|
||||
* 最后更新人id
|
||||
*/
|
||||
private Long updateBy;
|
||||
}
|
||||
|
@@ -63,5 +63,13 @@ public class IsvKeys {
|
||||
*/
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
/**
|
||||
* 创建人id
|
||||
*/
|
||||
private Long addBy;
|
||||
|
||||
/**
|
||||
* 最后更新人id
|
||||
*/
|
||||
private Long updateBy;
|
||||
}
|
||||
|
@@ -44,5 +44,13 @@ public class PermGroup {
|
||||
*/
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
/**
|
||||
* 创建人id
|
||||
*/
|
||||
private Long addBy;
|
||||
|
||||
/**
|
||||
* 最后更新人id
|
||||
*/
|
||||
private Long updateBy;
|
||||
}
|
||||
|
@@ -43,5 +43,13 @@ public class PermGroupPermission {
|
||||
*/
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
/**
|
||||
* 创建人id
|
||||
*/
|
||||
private Long addBy;
|
||||
|
||||
/**
|
||||
* 最后更新人id
|
||||
*/
|
||||
private Long updateBy;
|
||||
}
|
||||
|
@@ -34,5 +34,13 @@ public class PermIsvGroup {
|
||||
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
/**
|
||||
* 创建人id
|
||||
*/
|
||||
private Long addBy;
|
||||
|
||||
/**
|
||||
* 最后更新人id
|
||||
*/
|
||||
private Long updateBy;
|
||||
}
|
||||
|
@@ -68,5 +68,13 @@ public class SysAdminUser {
|
||||
*/
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
/**
|
||||
* 创建人id
|
||||
*/
|
||||
private Long addBy;
|
||||
|
||||
/**
|
||||
* 最后更新人id
|
||||
*/
|
||||
private Long updateBy;
|
||||
}
|
||||
|
@@ -33,5 +33,13 @@ public class SysConfig {
|
||||
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
/**
|
||||
* 创建人id
|
||||
*/
|
||||
private Long addBy;
|
||||
|
||||
/**
|
||||
* 最后更新人id
|
||||
*/
|
||||
private Long updateBy;
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
}
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
||||
|
||||
|
@@ -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)
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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;
|
||||
|
@@ -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 六如
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user