diff --git a/opsli-api/src/main/java/org/opsli/api/conf/prop/ApiPathProperties.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/autoconfigure/ApiPathProperties.java similarity index 74% rename from opsli-api/src/main/java/org/opsli/api/conf/prop/ApiPathProperties.java rename to opsli-base-support/opsli-core/src/main/java/org/opsli/core/autoconfigure/ApiPathProperties.java index 917d8b84..c988c016 100644 --- a/opsli-api/src/main/java/org/opsli/api/conf/prop/ApiPathProperties.java +++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/autoconfigure/ApiPathProperties.java @@ -13,9 +13,8 @@ * License for the specific language governing permissions and limitations under * the License. */ -package org.opsli.api.conf.prop; +package org.opsli.core.autoconfigure; -import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @@ -25,9 +24,16 @@ import org.springframework.stereotype.Component; */ @Component @ConfigurationProperties(prefix = "server.servlet.api.path") -@Data public class ApiPathProperties { - String globalPrefix = "api"; + /** 专门针对 Controller层接口路径前缀全局配置 */ + private String globalPrefix; + public String getGlobalPrefix() { + return globalPrefix; + } + + public void setGlobalPrefix(String globalPrefix) { + this.globalPrefix = globalPrefix; + } } diff --git a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/autoconfigure/GlobalProperties.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/autoconfigure/GlobalProperties.java new file mode 100644 index 00000000..f24ab769 --- /dev/null +++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/autoconfigure/GlobalProperties.java @@ -0,0 +1,359 @@ +package org.opsli.core.autoconfigure; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +import java.util.Set; + +/** + * OPSLI 配置文件 + * + * @author 周鹏程 + * @date 2021-01-31 5:52 下午 + **/ +@Configuration +@ConfigurationProperties(prefix = GlobalProperties.PREFIX) +public class GlobalProperties { + + public static final String PREFIX = "opsli"; + + /** 系统名称 */ + private String systemName; + + /** 系统启动时间 为空则默认 真实当前系统启动时间 */ + private String systemStarterTime; + + /** 是否开启演示模式 */ + private boolean enableDemo; + + /** 软防火墙 */ + private Waf waf; + + /** 认证类 */ + private Auth auth; + + /** Web类 */ + private Web web; + + /** Excel类 */ + private Excel excel; + + + // ================================== + + public String getSystemName() { + return systemName; + } + + public void setSystemName(String systemName) { + this.systemName = systemName; + } + + public String getSystemStarterTime() { + return systemStarterTime; + } + + public void setSystemStarterTime(String systemStarterTime) { + this.systemStarterTime = systemStarterTime; + } + + public boolean isEnableDemo() { + return enableDemo; + } + + public void setEnableDemo(boolean enableDemo) { + this.enableDemo = enableDemo; + } + + public Waf getWaf() { + return waf; + } + + public void setWaf(Waf waf) { + this.waf = waf; + } + + public Auth getAuth() { + return auth; + } + + public void setAuth(Auth auth) { + this.auth = auth; + } + + public Web getWeb() { + return web; + } + + public void setWeb(Web web) { + this.web = web; + } + + public Excel getExcel() { + return excel; + } + + public void setExcel(Excel excel) { + this.excel = excel; + } + + // ============== 内部类 ============= + + /** + * 软防火墙 + */ + public static class Waf { + + /** 是否生效 */ + private boolean enable; + + /** xss 过滤 */ + private boolean xssFilter; + + /** sql 过滤 */ + private boolean sqlFilter; + + /** 过滤器需要过滤的路径 */ + private Set urlPatterns; + + /** 过滤器需要排除过滤的路径 */ + private Set urlExclusion; + + /** 过滤器的优先级,值越小优先级越高 */ + private int order; + + // ============================= + + public Set getUrlPatterns() { + return urlPatterns; + } + + public void setUrlPatterns(Set urlPatterns) { + this.urlPatterns = urlPatterns; + } + + public Set getUrlExclusion() { + return urlExclusion; + } + + public void setUrlExclusion(Set urlExclusion) { + this.urlExclusion = urlExclusion; + } + + public int getOrder() { + return order; + } + + public void setOrder(int order) { + this.order = order; + } + + public boolean isEnable() { + return enable; + } + + public void setEnable(boolean enable) { + this.enable = enable; + } + + public boolean isXssFilter() { + return xssFilter; + } + + public void setXssFilter(boolean xssFilter) { + this.xssFilter = xssFilter; + } + + public boolean isSqlFilter() { + return sqlFilter; + } + + public void setSqlFilter(boolean sqlFilter) { + this.sqlFilter = sqlFilter; + } + } + + /** + * Web + */ + public static class Web { + + /** 文件上传地址 */ + private String uploadPath; + + // =========================== + + + public String getUploadPath() { + return uploadPath; + } + + public void setUploadPath(String uploadPath) { + this.uploadPath = uploadPath; + } + } + + /** + * 认证类 + */ + public static class Auth { + + /** 超级管理员账号 */ + private String superAdmin; + + /** 默认密码 */ + private String defaultPass; + + /** Token */ + private Token token; + + /** Login */ + private Login login; + + // =========================== + + public String getSuperAdmin() { + return superAdmin; + } + + public void setSuperAdmin(String superAdmin) { + this.superAdmin = superAdmin; + } + + public String getDefaultPass() { + return defaultPass; + } + + public void setDefaultPass(String defaultPass) { + this.defaultPass = defaultPass; + } + + public Token getToken() { + return token; + } + + public void setToken(Token token) { + this.token = token; + } + + public Login getLogin() { + return login; + } + + public void setLogin(Login login) { + this.login = login; + } + + /** + * 认证类 + */ + public static class Token { + + /** 盐值 */ + private String secret; + + /** 有效时间 (分钟)*/ + private Integer effectiveTime; + + /** 排除URL*/ + private Set urlExclusion; + + // =============================== + + public String getSecret() { + return secret; + } + + public void setSecret(String secret) { + this.secret = secret; + } + + public Integer getEffectiveTime() { + return effectiveTime; + } + + public void setEffectiveTime(Integer effectiveTime) { + this.effectiveTime = effectiveTime; + } + + public Set getUrlExclusion() { + return urlExclusion; + } + + public void setUrlExclusion(Set urlExclusion) { + this.urlExclusion = urlExclusion; + } + } + + /** + * 登录类 + */ + public static class Login { + + /** 失败次数 */ + private Integer slipCount; + + /** 失败N次后弹出验证码 (超过验证码阈值 弹出验证码) */ + private Integer slipVerifyCount; + + /** 失败锁定时间(秒) */ + private Integer slipLockSpeed; + + public Integer getSlipCount() { + return slipCount; + } + + public void setSlipCount(Integer slipCount) { + this.slipCount = slipCount; + } + + public Integer getSlipVerifyCount() { + return slipVerifyCount; + } + + public void setSlipVerifyCount(Integer slipVerifyCount) { + this.slipVerifyCount = slipVerifyCount; + } + + public Integer getSlipLockSpeed() { + return slipLockSpeed; + } + + public void setSlipLockSpeed(Integer slipLockSpeed) { + this.slipLockSpeed = slipLockSpeed; + } + } + } + + /** + * Excel + */ + public static class Excel { + + /** 最大导入操作数 */ + private Integer importMaxCount; + + /** 最大导出操作数 */ + private Integer exportMaxCount; + + // =========================== + + public Integer getImportMaxCount() { + return importMaxCount; + } + + public void setImportMaxCount(Integer importMaxCount) { + this.importMaxCount = importMaxCount; + } + + public Integer getExportMaxCount() { + return exportMaxCount; + } + + public void setExportMaxCount(Integer exportMaxCount) { + this.exportMaxCount = exportMaxCount; + } + } + +} + diff --git a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/base/concroller/BaseRestController.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/base/controller/BaseRestController.java similarity index 94% rename from opsli-base-support/opsli-core/src/main/java/org/opsli/core/base/concroller/BaseRestController.java rename to opsli-base-support/opsli-core/src/main/java/org/opsli/core/base/controller/BaseRestController.java index ed704887..8f8ded66 100644 --- a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/base/concroller/BaseRestController.java +++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/base/controller/BaseRestController.java @@ -13,7 +13,7 @@ * License for the specific language governing permissions and limitations under * the License. */ -package org.opsli.core.base.concroller; +package org.opsli.core.base.controller; import cn.hutool.core.collection.CollUtil; @@ -37,6 +37,7 @@ import org.opsli.common.exception.TokenException; import org.opsli.common.msg.CommonMsg; import org.opsli.common.utils.OutputStreamUtil; import org.opsli.common.utils.WrapperUtil; +import org.opsli.core.autoconfigure.GlobalProperties; import org.opsli.core.base.entity.BaseEntity; import org.opsli.core.base.service.interfaces.CrudServiceInterface; import org.opsli.core.cache.local.CacheUtil; @@ -49,7 +50,6 @@ import org.opsli.plugins.excel.exception.ExcelPluginException; import org.opsli.plugins.redis.RedisLockPlugins; import org.opsli.plugins.redis.lock.RedisLock; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @@ -77,9 +77,6 @@ import java.util.List; @RestController public abstract class BaseRestController >{ - @Value("${opsli.enable-demo}") - private boolean enableDemo; - /** 开启热点数据状态 */ protected boolean hotDataFlag = false; @@ -92,14 +89,19 @@ public abstract class BaseRestController importExcel(MultipartHttpServletRequest request){ // 计时器 @@ -210,8 +212,9 @@ public abstract class BaseRestController modelList = excelUtil.readExcel(files.get(0), modelClazz); if(CollUtil.isNotEmpty(modelList)){ - if(modelList.size() > excelMaxCount){ - String maxError = StrUtil.format(CoreMsg.EXCEL_HANDLE_MAX.getMessage(), modelList.size(), excelMaxCount); + if(modelList.size() > globalProperties.getExcel().getImportMaxCount()){ + String maxError = StrUtil.format(CoreMsg.EXCEL_HANDLE_MAX.getMessage(), modelList.size(), + globalProperties.getExcel().getImportMaxCount()); // 清空 list modelList.clear(); // 超出最大导出数量 @@ -253,7 +256,7 @@ public abstract class BaseRestController excelMaxCount){ - String maxError = StrUtil.format(CoreMsg.EXCEL_HANDLE_MAX.getMessage(), count, excelMaxCount); + if(count > globalProperties.getExcel().getExportMaxCount()){ + String maxError = StrUtil.format(CoreMsg.EXCEL_HANDLE_MAX.getMessage(), count, + globalProperties.getExcel().getExportMaxCount()); // 超出最大导出数量 throw new ExcelPluginException(CoreMsg.EXCEL_HANDLE_MAX.getCode(), maxError); } @@ -353,7 +357,8 @@ public abstract class BaseRestController */ private Class getModelClass(){ Class tClass = null; @@ -410,7 +415,7 @@ public abstract class BaseRestController */ private Class getEntityClass(){ Class tClass = null; diff --git a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/conf/ShiroConfig.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/conf/ShiroConfig.java index 740dc833..8e8f6772 100644 --- a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/conf/ShiroConfig.java +++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/conf/ShiroConfig.java @@ -30,11 +30,13 @@ import org.apache.shiro.spring.web.ShiroFilterFactoryBean; import org.apache.shiro.web.mgt.DefaultWebSecurityManager; import org.apache.shiro.web.session.mgt.DefaultWebSessionManager; import org.opsli.common.utils.Props; +import org.opsli.core.autoconfigure.GlobalProperties; import org.opsli.core.security.shiro.authenticator.CustomModularRealmAuthenticator; import org.opsli.core.security.shiro.filter.CustomShiroFilter; import org.opsli.core.security.shiro.realm.FlagRealm; import org.opsli.plugins.redis.conf.RedisPluginConfig; import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -69,6 +71,9 @@ public class ShiroConfig { API_URL_PREFIX = props.getStr("server.servlet.api.path.global-prefix",""); } + @Autowired + GlobalProperties globalProperties; + /** * filer * @param securityManager 安全管理器 diff --git a/opsli-api/src/main/java/org/opsli/api/conf/SpringWebMvcConfig.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/conf/SpringWebMvcConfig.java similarity index 89% rename from opsli-api/src/main/java/org/opsli/api/conf/SpringWebMvcConfig.java rename to opsli-base-support/opsli-core/src/main/java/org/opsli/core/conf/SpringWebMvcConfig.java index 32bfc1cf..164fded5 100644 --- a/opsli-api/src/main/java/org/opsli/api/conf/SpringWebMvcConfig.java +++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/conf/SpringWebMvcConfig.java @@ -13,12 +13,11 @@ * License for the specific language governing permissions and limitations under * the License. */ -package org.opsli.api.conf; +package org.opsli.core.conf; import lombok.extern.slf4j.Slf4j; -import org.opsli.api.conf.prop.ApiPathProperties; import org.opsli.common.annotation.ApiRestController; -import org.opsli.common.utils.Props; +import org.opsli.core.autoconfigure.ApiPathProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.cors.CorsConfiguration; @@ -37,14 +36,6 @@ import javax.annotation.Resource; @Configuration public class SpringWebMvcConfig implements WebMvcConfigurer { - /** 虚拟根路径 */ - private static final String BASE_DIR; - static { - Props props = new Props("application.yaml"); - BASE_DIR = props.getStr("server.tomcat.basedir"); - } - - @Resource private ApiPathProperties apiPathProperties; diff --git a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/conf/WafConfig.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/conf/WafConfig.java index f0203c6e..eaadb909 100644 --- a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/conf/WafConfig.java +++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/conf/WafConfig.java @@ -15,11 +15,11 @@ */ package org.opsli.core.conf; -import org.opsli.core.waf.WafProperties; +import cn.hutool.core.convert.Convert; +import org.opsli.core.autoconfigure.GlobalProperties; import org.opsli.core.waf.filter.WafFilter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -34,26 +34,25 @@ import javax.servlet.DispatcherType; * @date 2020-10-09 */ @Configuration -@EnableConfigurationProperties({WafProperties.class}) public class WafConfig { @Autowired - WafProperties wafProperties; + GlobalProperties globalProperties; @Bean - @ConditionalOnProperty(prefix = WafProperties.WAF, name = "enable", havingValue = "true", matchIfMissing = false) - public FilterRegistrationBean xssFilterRegistration() { + @ConditionalOnProperty(prefix = GlobalProperties.PREFIX +".waf", name = "enable", havingValue = "true", matchIfMissing = false) + public FilterRegistrationBean wafFilterRegistration() { WafFilter wafFilter = new WafFilter(); - wafFilter.setUrlExclusion(wafProperties.getUrlExclusion()); - wafFilter.setEnableSqlFilter(wafProperties.isSqlFilter()); - wafFilter.setEnableXssFilter(wafProperties.isXssFilter()); + wafFilter.setUrlExclusion(globalProperties.getWaf().getUrlExclusion()); + wafFilter.setEnableSqlFilter(globalProperties.getWaf().isSqlFilter()); + wafFilter.setEnableXssFilter(globalProperties.getWaf().isXssFilter()); - FilterRegistrationBean registration = new FilterRegistrationBean(); + FilterRegistrationBean registration = new FilterRegistrationBean<>(); registration.setDispatcherTypes(DispatcherType.REQUEST); registration.setFilter(wafFilter); - registration.addUrlPatterns(wafProperties.getUrlPatterns()); - registration.setName(wafProperties.getName()); - registration.setOrder(wafProperties.getOrder()); + registration.addUrlPatterns(Convert.toStrArray(globalProperties.getWaf().getUrlPatterns())); + registration.setName(WafFilter.class.getSimpleName()); + registration.setOrder(globalProperties.getWaf().getOrder()); return registration; } diff --git a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/filters/aspect/ValitaionArgsAop.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/filters/aspect/ValitaionArgsAop.java index 1cb8efbd..16994698 100644 --- a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/filters/aspect/ValitaionArgsAop.java +++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/filters/aspect/ValitaionArgsAop.java @@ -21,7 +21,7 @@ import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.opsli.api.base.warpper.ApiWrapper; -import org.opsli.api.utils.ValidationUtil; +import org.opsli.core.utils.ValidationUtil; import org.opsli.common.exception.ServiceException; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; diff --git a/opsli-api/src/main/java/org/opsli/api/msg/ValidationMsg.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/msg/ValidationMsg.java similarity index 99% rename from opsli-api/src/main/java/org/opsli/api/msg/ValidationMsg.java rename to opsli-base-support/opsli-core/src/main/java/org/opsli/core/msg/ValidationMsg.java index ef727c1b..ce782f43 100644 --- a/opsli-api/src/main/java/org/opsli/api/msg/ValidationMsg.java +++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/msg/ValidationMsg.java @@ -13,7 +13,7 @@ * License for the specific language governing permissions and limitations under * the License. */ -package org.opsli.api.msg; +package org.opsli.core.msg; import org.opsli.common.base.msg.BaseMsg; diff --git a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/persistence/querybuilder/chain/TenantHandler.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/persistence/querybuilder/chain/TenantHandler.java index 60cd50cd..a342bc6d 100644 --- a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/persistence/querybuilder/chain/TenantHandler.java +++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/persistence/querybuilder/chain/TenantHandler.java @@ -20,10 +20,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.commons.lang3.StringUtils; import org.opsli.api.wrapper.system.user.UserModel; import org.opsli.common.constants.MyBatisConstants; -import org.opsli.common.exception.ServiceException; import org.opsli.common.utils.HumpUtil; import org.opsli.core.base.entity.BaseEntity; -import org.opsli.core.msg.CoreMsg; import org.opsli.core.utils.UserUtil; /** diff --git a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/JwtUtil.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/JwtUtil.java index 28b63110..bab47c3a 100644 --- a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/JwtUtil.java +++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/JwtUtil.java @@ -8,38 +8,43 @@ import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.exceptions.JWTDecodeException; import com.auth0.jwt.interfaces.DecodedJWT; import lombok.extern.slf4j.Slf4j; +import org.opsli.core.autoconfigure.GlobalProperties; import org.opsli.common.constants.SignConstants; import org.opsli.common.constants.TokenTypeConstants; import org.opsli.common.exception.JwtException; -import org.opsli.common.utils.Props; import org.opsli.core.msg.JwtMsg; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.context.annotation.Lazy; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; import java.util.Date; +import static org.opsli.common.constants.OrderConstants.UTIL_ORDER; + /** * JWT工具类 * @author sunzhiqiang23 * @date 2020/05/29 21:23 */ @Slf4j -public final class JwtUtil { +@Order(UTIL_ORDER) +@Lazy(false) +@Component +@AutoConfigureAfter({GlobalProperties.class}) +public class JwtUtil { /** * 过期时间改为从配置文件获取 120 分钟 两小时 */ - public static final long EXPIRE; + public static long EXPIRE; /** * JWT认证加密私钥(Base64加密) */ - private static final String ENCRYPT_JWT_KEY = "a30ade6452725123436288ccae58570738ee"; - - static { - Props props = new Props("application.yaml"); - // token 有效时间 - EXPIRE = props.getLong("opsli.token-effective-time", 120L) * 60 * 1000; - } + private static String ENCRYPT_JWT_INITIAL_SECRET; /** @@ -48,7 +53,7 @@ public final class JwtUtil { * @return boolean 是否正确 */ public static boolean verify(String token) { - String secret = getClaim(token, SignConstants.ACCOUNT) + Base64.decodeStr(ENCRYPT_JWT_KEY); + String secret = getClaim(token, SignConstants.ACCOUNT) + Base64.decodeStr(ENCRYPT_JWT_INITIAL_SECRET); Algorithm algorithm = Algorithm.HMAC256(secret); JWTVerifier verifier = JWT.require(algorithm).build(); verifier.verify(token); @@ -57,8 +62,8 @@ public final class JwtUtil { /** * 获得Token中的信息 - * @param token - * @param claim + * @param token token + * @param claim 字段 * @return java.lang.String */ public static String getClaim(String token, String claim) { @@ -81,7 +86,7 @@ public final class JwtUtil { */ public static String sign(String tokenType, String account, String userId) { // 帐号加JWT私钥加密 - String secret = account + Base64.decodeStr(ENCRYPT_JWT_KEY); + String secret = account + Base64.decodeStr(ENCRYPT_JWT_INITIAL_SECRET); // 此处过期时间是以毫秒为单位,所以乘以1000 Date date = new Date(System.currentTimeMillis() + EXPIRE); Algorithm algorithm = Algorithm.HMAC256(secret); @@ -97,15 +102,37 @@ public final class JwtUtil { } - public static void main(String[] args) { - String aaaaaa = JwtUtil.sign(TokenTypeConstants.TYPE_SYSTEM, "aaaaaa","123123"); + // ================== - boolean verify = JwtUtil.verify(aaaaaa); - System.out.println(aaaaaa); - System.out.println(verify); + @Autowired + public void setExpire(GlobalProperties globalProperties) { + // 获得 Token失效时间 + if(globalProperties != null && globalProperties.getAuth() != null + && globalProperties.getAuth().getToken() != null + ){ + EXPIRE = globalProperties.getAuth() + .getToken().getEffectiveTime() * 60 * 1000; + } + } + + @Autowired + public void setEncryptJwtInitialSecret(GlobalProperties globalProperties) { + // 获得 Token初始盐值 + if(globalProperties != null && globalProperties.getAuth() != null + && globalProperties.getAuth().getToken() != null + ){ + ENCRYPT_JWT_INITIAL_SECRET = globalProperties.getAuth() + .getToken().getSecret(); + } } // ================== - private JwtUtil(){} + public static void main(String[] args) { + String token = JwtUtil.sign(TokenTypeConstants.TYPE_SYSTEM, "test","123123"); + + boolean verify = JwtUtil.verify(token); + System.out.println(token); + System.out.println(verify); + } } diff --git a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/UserTokenUtil.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/UserTokenUtil.java index c8020750..aa33608a 100644 --- a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/UserTokenUtil.java +++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/UserTokenUtil.java @@ -32,6 +32,7 @@ import org.opsli.common.constants.TokenConstants; import org.opsli.common.constants.TokenTypeConstants; import org.opsli.common.exception.TokenException; import org.opsli.common.utils.Props; +import org.opsli.core.autoconfigure.GlobalProperties; import org.opsli.core.msg.TokenMsg; import org.opsli.plugins.redis.RedisPlugin; import org.springframework.beans.factory.annotation.Autowired; @@ -55,7 +56,7 @@ import static org.opsli.common.constants.OrderConstants.UTIL_ORDER; @Slf4j @Order(UTIL_ORDER) @Component -@AutoConfigureAfter({RedisPlugin.class}) +@AutoConfigureAfter({GlobalProperties.class, RedisPlugin.class}) @Lazy(false) public class UserTokenUtil { @@ -68,11 +69,11 @@ public class UserTokenUtil { /** 账号失败锁定KEY */ public static final String ACCOUNT_SLIP_LOCK_PREFIX; /** 账号失败阈值 */ - public static final int ACCOUNT_SLIP_COUNT; + public static int ACCOUNT_SLIP_COUNT; /** 账号失败N次后弹出验证码 */ - public static final int ACCOUNT_SLIP_VERIFY_COUNT; + public static int ACCOUNT_SLIP_VERIFY_COUNT; /** 账号锁定时间 */ - public static final int ACCOUNT_SLIP_LOCK_SPEED; + public static int ACCOUNT_SLIP_LOCK_SPEED; /** Redis插件 */ private static RedisPlugin redisPlugin; @@ -88,16 +89,13 @@ public class UserTokenUtil { ACCOUNT_SLIP_COUNT_PREFIX = PREFIX_NAME + "account:slip:count:"; ACCOUNT_SLIP_LOCK_PREFIX = PREFIX_NAME + "account:slip:lock:"; - // 配置数据 - ACCOUNT_SLIP_COUNT = props.getInt("opsli.login.slip-count", 5); - ACCOUNT_SLIP_VERIFY_COUNT = props.getInt("opsli.login.slip-verify-count", 3); - ACCOUNT_SLIP_LOCK_SPEED = props.getInt("opsli.login.slip-lock-speed", 300); + } /** * 根据 user 创建Token - * @param user + * @param user 用户 * @return */ public static ResultVo> createToken(UserModel user) { @@ -145,7 +143,7 @@ public class UserTokenUtil { /** * 根据 Token 获得用户ID - * @param token + * @param token token * @return */ public static String getUserIdByToken(String token) { @@ -161,7 +159,7 @@ public class UserTokenUtil { /** * 根据 Token 获得 username - * @param token + * @param token token * @return */ public static String getUserNameByToken(String token) { @@ -179,7 +177,7 @@ public class UserTokenUtil { /** * 退出登陆 - * @param token + * @param token token */ public static void logout(String token) { if(StringUtils.isEmpty(token)){ @@ -206,7 +204,7 @@ public class UserTokenUtil { /** * 验证 token - * @param token + * @param token token */ public static boolean verify(String token) { if(StringUtils.isEmpty(token)){ @@ -341,4 +339,33 @@ public class UserTokenUtil { UserTokenUtil.redisPlugin = redisPlugin; } + @Autowired + public void setAccountSlipCount(GlobalProperties globalProperties) { + if(globalProperties != null && globalProperties.getAuth() != null + && globalProperties.getAuth().getLogin() != null + ){ + ACCOUNT_SLIP_COUNT = globalProperties.getAuth() + .getLogin().getSlipCount(); + } + } + + @Autowired + public void setAccountSlipVerifyCount(GlobalProperties globalProperties) { + if(globalProperties != null && globalProperties.getAuth() != null + && globalProperties.getAuth().getLogin() != null + ){ + ACCOUNT_SLIP_VERIFY_COUNT = globalProperties.getAuth() + .getLogin().getSlipVerifyCount(); + } + } + + @Autowired + public void setAccountSlipLockSpeed(GlobalProperties globalProperties) { + if(globalProperties != null && globalProperties.getAuth() != null + && globalProperties.getAuth().getLogin() != null + ){ + ACCOUNT_SLIP_LOCK_SPEED = globalProperties.getAuth() + .getLogin().getSlipLockSpeed(); + } + } } diff --git a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/UserUtil.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/UserUtil.java index 37dc2860..5535c529 100644 --- a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/UserUtil.java +++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/UserUtil.java @@ -28,7 +28,7 @@ import org.opsli.api.wrapper.system.menu.MenuModel; import org.opsli.api.wrapper.system.user.UserModel; import org.opsli.common.api.TokenThreadLocal; import org.opsli.common.exception.TokenException; -import org.opsli.common.utils.Props; +import org.opsli.core.autoconfigure.GlobalProperties; import org.opsli.core.cache.local.CacheUtil; import org.opsli.core.cache.pushsub.msgs.UserMsgFactory; import org.opsli.core.msg.TokenMsg; @@ -55,13 +55,10 @@ import static org.opsli.common.constants.OrderConstants.UTIL_ORDER; @Slf4j @Order(UTIL_ORDER) @Component -@AutoConfigureAfter({RedisPlugin.class , RedisLockPlugins.class, UserApi.class}) +@AutoConfigureAfter({GlobalProperties.class, RedisPlugin.class , RedisLockPlugins.class, UserApi.class}) @Lazy(false) public class UserUtil { - /** 超级管理员 */ - public static final String SUPER_ADMIN; - /** 前缀 */ public static final String PREFIX_ID = "userId:"; public static final String PREFIX_ID_ROLES = "userId:roles:"; @@ -79,15 +76,12 @@ public class UserUtil { /** 用户Service */ private static UserApi userApi; - - static{ - Props props = new Props("application.yaml"); - SUPER_ADMIN = props.getStr("opsli.superadmin","system"); - } + /** 超级管理员 */ + public static String SUPER_ADMIN; /** * 获得当前系统登陆用户 - * @return + * @return UserModel */ public static UserModel getUser(){ String token = TokenThreadLocal.get(); @@ -108,8 +102,8 @@ public class UserUtil { /** * 根据ID 获得用户 - * @param userId - * @return + * @param userId 用户ID + * @return UserModel */ public static UserModel getUser(String userId){ // 先从缓存里拿 @@ -176,8 +170,8 @@ public class UserUtil { /** * 根据 userName 获得用户 - * @param userName - * @return + * @param userName 用户名 + * @return UserModel */ public static UserModel getUserByUserName(String userName){ // 先从缓存里拿 @@ -238,8 +232,8 @@ public class UserUtil { /** * 根据 userId 获得用户角色列表 - * @param userId - * @return + * @param userId 用户ID + * @return List */ public static List getUserRolesByUserId(String userId){ List roles = null; @@ -325,8 +319,8 @@ public class UserUtil { /** * 根据 userId 获得用户权限列表 - * @param userId - * @return + * @param userId 用户ID + * @return List */ public static List getUserAllPermsByUserId(String userId){ List permissions = null; @@ -412,8 +406,8 @@ public class UserUtil { /** * 根据 userId 获得用户菜单 - * @param userId - * @return + * @param userId 用户ID + * @return List */ public static List getMenuListByUserId(String userId){ List menus = null; @@ -521,8 +515,8 @@ public class UserUtil { /** * 刷新用户 - 删就完了 - * @param user - * @return + * @param user 用户 + * @return boolean */ public static boolean refreshUser(UserModel user){ if(user == null || StringUtils.isEmpty(user.getId())){ @@ -587,8 +581,8 @@ public class UserUtil { /** * 刷新用户角色 - 删就完了 - * @param userId - * @return + * @param userId 用户ID + * @return boolean */ public static boolean refreshUserRoles(String userId){ Object obj = CacheUtil.get(PREFIX_ID_ROLES + userId); @@ -626,8 +620,8 @@ public class UserUtil { /** * 刷新用户权限 - 删就完了 - * @param userId - * @return + * @param userId 用户ID + * @return boolean */ public static boolean refreshUserAllPerms(String userId){ Object obj = CacheUtil.get(PREFIX_ID_PERMISSIONS + userId); @@ -665,8 +659,8 @@ public class UserUtil { /** * 刷新用户菜单 - 删就完了 - * @param userId - * @return + * @param userId 用户ID + * @return boolean */ public static boolean refreshUserMenus(String userId){ Object obj = CacheUtil.get(PREFIX_ID_MENUS + userId); @@ -704,7 +698,7 @@ public class UserUtil { /** * 获得 租户ID - * @return + * @return String */ public static String getTenantId(){ // 判断权限 如果是 admin 超级管理员 则租户ID清空 且findList 不做处理 否则默认都会做处理 @@ -713,7 +707,7 @@ public class UserUtil { UserModel user = getUser(); // 如果是超级管理员 则不进行租户处理 - if(SUPER_ADMIN.equals(user.getUsername())){ + if(StringUtils.equals(SUPER_ADMIN, user.getUsername())){ return null; } return user.getTenantId(); @@ -723,7 +717,7 @@ public class UserUtil { * 处理密码 * @param password 密码 * @param secretkey 盐值 - * @return + * @return String */ public static String handlePassword(String password, String secretkey){ return new Md5Hash(password, secretkey).toHex(); @@ -732,17 +726,26 @@ public class UserUtil { // ===================================== @Autowired - public void setRedisPlugin(RedisPlugin redisPlugin) { + public void setRedisPlugin(RedisPlugin redisPlugin) { UserUtil.redisPlugin = redisPlugin; } @Autowired - public void setRedisLockPlugins(RedisLockPlugins redisLockPlugins) { + public void setRedisLockPlugins(RedisLockPlugins redisLockPlugins) { UserUtil.redisLockPlugins = redisLockPlugins; } @Autowired - public void setUserApi(UserApi userApi) { + public void setUserApi(UserApi userApi) { UserUtil.userApi = userApi; } + + @Autowired + public void setSuperAdmin(GlobalProperties globalProperties) { + // 获得 超级管理员 + if(globalProperties != null && globalProperties.getAuth() != null ){ + UserUtil.SUPER_ADMIN = globalProperties.getAuth().getSuperAdmin(); + } + } + } diff --git a/opsli-api/src/main/java/org/opsli/api/utils/ValidationUtil.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/ValidationUtil.java similarity index 99% rename from opsli-api/src/main/java/org/opsli/api/utils/ValidationUtil.java rename to opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/ValidationUtil.java index b9586802..f38d54a8 100644 --- a/opsli-api/src/main/java/org/opsli/api/utils/ValidationUtil.java +++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/ValidationUtil.java @@ -13,7 +13,7 @@ * License for the specific language governing permissions and limitations under * the License. */ -package org.opsli.api.utils; +package org.opsli.core.utils; import cn.hutool.core.convert.Convert; import cn.hutool.core.lang.Validator; @@ -21,7 +21,7 @@ import cn.hutool.core.util.ReflectUtil; import io.swagger.annotations.ApiModelProperty; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; -import org.opsli.api.msg.ValidationMsg; +import org.opsli.core.msg.ValidationMsg; import org.opsli.api.wrapper.system.dict.DictModel; import org.opsli.common.annotation.validation.ValidationArgs; import org.opsli.common.annotation.validation.ValidationArgsLenMax; diff --git a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/waf/WafProperties.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/waf/WafProperties.java deleted file mode 100644 index 9d8e2bc7..00000000 --- a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/waf/WafProperties.java +++ /dev/null @@ -1,119 +0,0 @@ -/** - * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com - *

- * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - *

- * http://www.apache.org/licenses/LICENSE-2.0 - *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package org.opsli.core.waf; - -import org.springframework.boot.context.properties.ConfigurationProperties; - -import java.util.List; - -/** - * Xss过滤器配置属性 - * - * @author Parker - * @date 2018/10/26 - */ -@ConfigurationProperties(prefix = WafProperties.WAF) -public class WafProperties { - - public static final String WAF = "opsli.waf"; - - /** - * 是否生效 - */ - boolean enable = false; - - /** - * xss 过滤 - */ - boolean xssFilter = false; - - /** - * sql 过滤 - */ - boolean sqlFilter = false; - - /** - * xss过滤器的名字 - */ - String name = "xssFilter"; - /** - * xss过滤器需要过滤的路径 - */ - String[] urlPatterns = {"/*"}; - - List urlExclusion; - - /** - * 过滤器的优先级,值越小优先级越高 - */ - int order = 0; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String[] getUrlPatterns() { - return urlPatterns; - } - - public void setUrlPatterns(String[] urlPatterns) { - this.urlPatterns = urlPatterns; - } - - public List getUrlExclusion() { - return urlExclusion; - } - - public void setUrlExclusion(List urlExclusion) { - this.urlExclusion = urlExclusion; - } - - public int getOrder() { - return order; - } - - public void setOrder(int order) { - this.order = order; - } - - public boolean isEnable() { - return enable; - } - - public void setEnable(boolean enable) { - this.enable = enable; - } - - public boolean isXssFilter() { - return xssFilter; - } - - public void setXssFilter(boolean xssFilter) { - this.xssFilter = xssFilter; - } - - public boolean isSqlFilter() { - return sqlFilter; - } - - public void setSqlFilter(boolean sqlFilter) { - this.sqlFilter = sqlFilter; - } -} diff --git a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/waf/filter/WafFilter.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/waf/filter/WafFilter.java index 710b4531..4ae084c1 100644 --- a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/waf/filter/WafFilter.java +++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/waf/filter/WafFilter.java @@ -22,6 +22,7 @@ import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.List; +import java.util.Set; /** * 防火墙 @@ -34,7 +35,7 @@ public class WafFilter implements Filter { private boolean enableXssFilter = false; private boolean enableSqlFilter = false; - private List urlExclusion; + private Set urlExclusion; @Override @@ -74,7 +75,7 @@ public class WafFilter implements Filter { this.enableSqlFilter = enableSqlFilter; } - public void setUrlExclusion(List urlExclusion) { + public void setUrlExclusion(Set urlExclusion) { this.urlExclusion = urlExclusion; } } diff --git a/opsli-base-support/opsli-core/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/opsli-base-support/opsli-core/src/main/resources/META-INF/additional-spring-configuration-metadata.json new file mode 100644 index 00000000..8c13774d --- /dev/null +++ b/opsli-base-support/opsli-core/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -0,0 +1,194 @@ +{ + "properties": [ + { + "name": "server.servlet.api.path.global-prefix", + "type": "java.lang.String", + "defaultValue": "api", + "description": "专门针对 Controller层接口路径前缀全局配置." + }, + { + "name": "spring.cache-conf.prefix", + "type": "java.lang.String", + "defaultValue": "opsli", + "description": "缓存配置项 前缀." + }, + { + "name": "spring.cache.enable", + "type": "java.lang.Boolean", + "defaultValue": false, + "description": "是否启用本地缓存 (默认不启用, 如果业务对于缓存依赖较高可启用本地缓存作为一级缓存)." + }, + { + "name": "spring.redis.pushsub.enable", + "type": "java.lang.Boolean", + "defaultValue": false, + "description": "开启消息订阅." + }, + { + "name": "knife4j.basic.enable", + "type": "java.lang.Boolean", + "defaultValue": false, + "description": "knife4j 开启Swagger的Basic认证功能,默认是false." + }, + { + "name": "knife4j.basic.username", + "type": "java.lang.String", + "defaultValue": "admin", + "description": "knife4j Basic认证用户名." + }, + { + "name": "knife4j.basic.password", + "type": "java.lang.String", + "defaultValue": "123456", + "description": "knife4j Basic认证密码." + }, + { + "name": "knife4j.production", + "type": "java.lang.Boolean", + "defaultValue": true, + "description": "knife4j 是否生产环境 (生产环境默认屏蔽文档)." + }, + { + "name": "log.path", + "type": "java.lang.String", + "defaultValue": "", + "description": "日志存储地址." + }, + + + + + { + "name": "opsli.system-name", + "sourceType": "org.opsli.core.autoconfigure.GlobalProperties", + "defaultValue": "OPSLI 快速开发平台", + "description": "系统名称." + }, + { + "name": "opsli.system-starter-time", + "sourceType": "org.opsli.core.autoconfigure.GlobalProperties", + "description": "系统启动时间 为空则默认 真实当前系统启动时间." + }, + { + "name": "opsli.enable-demo", + "sourceType": "org.opsli.core.autoconfigure.GlobalProperties", + "defaultValue": false, + "description": "是否开启演示模式." + }, + + + + { + "name": "opsli.waf.enable", + "sourceType": "org.opsli.core.autoconfigure.GlobalProperties$Waf", + "defaultValue": false, + "description": "软防火墙是否开启." + }, + { + "name": "opsli.waf.xss-filter", + "sourceType": "org.opsli.core.autoconfigure.GlobalProperties$Waf", + "defaultValue": false, + "description": "软防火墙 xss 过滤开启状态." + }, + { + "name": "opsli.waf.sql-filter", + "sourceType": "org.opsli.core.autoconfigure.GlobalProperties$Waf", + "defaultValue": false, + "description": "软防火墙 sql 过滤开启状态." + }, + { + "name": "opsli.waf.url-patterns", + "sourceType": "org.opsli.core.autoconfigure.GlobalProperties$Waf", + "defaultValue": [ + "/*" + ], + "description": "软防火墙 过滤器需要过滤的路径." + }, + { + "name": "opsli.waf.url-exclusion", + "sourceType": "org.opsli.core.autoconfigure.GlobalProperties$Waf", + "description": "软防火墙 过滤器需要排除过滤的路径." + }, + { + "name": "opsli.waf.order", + "sourceType": "org.opsli.core.autoconfigure.GlobalProperties$Waf", + "defaultValue": 0, + "description": "软防火墙 过滤器的优先级,值越小优先级越高." + }, + + + + { + "name": "opsli.web.upload-path", + "sourceType": "org.opsli.core.autoconfigure.GlobalProperties$Web", + "defaultValue": "", + "description": "Web 上传地址." + }, + + + + { + "name": "opsli.auth.super-admin", + "sourceType": "org.opsli.core.autoconfigure.GlobalProperties$Auth", + "defaultValue": "system", + "description": "认证类 超级管理员账户." + }, + { + "name": "opsli.auth.default-pass", + "sourceType": "org.opsli.core.autoconfigure.GlobalProperties$Auth", + "defaultValue": "Aa123456", + "description": "认证类 默认密码 (密码至少包含大小写字母,数字,且不少于6位)." + }, + + { + "name": "opsli.auth.token.secret", + "sourceType": "org.opsli.core.autoconfigure.GlobalProperties$Auth$Token", + "defaultValue": "53c0e33c9d4c5538969abf2fcf48351d", + "description": "认证类 Token 有效时间." + }, + { + "name": "opsli.auth.token.effective-time", + "sourceType": "org.opsli.core.autoconfigure.GlobalProperties$Auth$Token", + "defaultValue": 120, + "description": "认证类 Token 有效时间." + }, + { + "name": "opsli.auth.token.url-exclusion", + "sourceType": "org.opsli.core.autoconfigure.GlobalProperties$Auth$Token", + "description": "认证类 Token 排除URL." + }, + + { + "name": "opsli.auth.login.slip-count", + "sourceType": "org.opsli.core.autoconfigure.GlobalProperties$Auth$Login", + "defaultValue": 3, + "description": "认证类 登录 失败次数." + }, + { + "name": "opsli.auth.login.slip-verify-count", + "sourceType": "org.opsli.core.autoconfigure.GlobalProperties$Auth$Login", + "defaultValue": 3, + "description": "认证类 登录 失败N次后弹出验证码 (超过验证码阈值 弹出验证码)." + }, + { + "name": "opsli.auth.login.slip-lock-speed", + "sourceType": "org.opsli.core.autoconfigure.GlobalProperties$Auth$Login", + "description": "认证类 登录 失败锁定时间(秒)." + }, + + + + { + "name": "opsli.excel.import-max-count", + "sourceType": "org.opsli.core.autoconfigure.GlobalProperties$Excel", + "defaultValue": 20000, + "description": "Excel 导入最大操作数." + }, + { + "name": "opsli.excel.export-max-count", + "sourceType": "org.opsli.core.autoconfigure.GlobalProperties$Excel", + "defaultValue": 20000, + "description": "Excel 导出最大操作数." + } + ] +} diff --git a/opsli-base-support/opsli-core/src/test/java/EncryptTest.java b/opsli-base-support/opsli-core/src/test/java/EncryptTest.java new file mode 100644 index 00000000..39a52b0a --- /dev/null +++ b/opsli-base-support/opsli-core/src/test/java/EncryptTest.java @@ -0,0 +1,26 @@ +import cn.hutool.crypto.SecureUtil; +import cn.hutool.crypto.SmUtil; +import cn.hutool.crypto.asymmetric.SM2; +import org.junit.Test; + +/** + * @author 周鹏程 + * @date 2021-01-31 5:15 下午 + **/ +public class EncryptTest { + + @Test + public void testEncrypt(){ + + + SM2 sm2 = SmUtil.sm2("MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJqTLKryt+SYq8oHZ/PeFR64Pq2A9qsKZmZFzU6gvkQ37JeCFCYMitxmF7AtlktSktB3dPdxHEppbfSdY1+i140eAqMZga7j4FmjIdnyW1OauiVgaimJLAEyE7uTAAPggrU9kdqgXbA8hIffm5tu6DKRq/t1NpYEO42S/IGK/yoxAgMBAAECgYEAiWu+klwm0LxKPdpHuK7/58e1MVst8PHWB6aW2AhgHxX46NlkQE92RGsfNCnTLDPFAkCxZCrTE/SXJJmn9yY2qoS26OV0PbTGajk96M8lDi9JSmWCNV1eywPecObSyvtPd5jaPtq2jkgNY/hHJjH6kV7UAFZuaSK7jxskfq7uR2ECQQDPfmGjPiMc65+LE9U7jC4LokyUi1yCgN6AY5MgF6fkxUVJD2mtl9BqRK7qE0OnsRb0NzID3PSfa7aA2I0Rlsj/AkEAvrXUBQ6hfuEwD1896qpSJUr7tLidby/3jYwSoewuydDT2duDc2ZCz4/U/1NpxSxWT10ZZi2ExsFZn/3PDylczwJARA3oijkcHSUu69eybVh51bkCswnOasNHtwZxv+niWEdXhTH38EbFxcUHNaDh5MNRiwH7dobm+M7EShg8lJNHEwJAclRdU97OkFr9zeliHCGZd4P5XAFlWHfgJ7p2nR4Teqe3qZ6Aspj2qqpmnd7qxOrsn02H4YqeU+0sBs9I56T7XwJAAg8wHrh/FAPY96mAya0bpv6zm/7bave17vs+8B+fhBEHHuvetfv8Xi/RkXL0rjE4LaTHefoUbZPNbIhNYiN0CQ==", + "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCakyyq8rfkmKvKB2fz3hUeuD6tgParCmZmRc1OoL5EN+yXghQmDIrcZhewLZZLUpLQd3T3cRxKaW30nWNfoteNHgKjGYGu4+BZoyHZ8ltTmrolYGopiSwBMhO7kwAD4IK1PZHaoF2wPISH35ubbugykav7dTaWBDuNkvyBiv8qMQIDAQAB" + + ); + + System.out.println(sm2.getPublicKeyBase64()); + System.out.println(sm2.getPrivateKeyBase64()); + + + } +} diff --git a/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/modulars/creater/column/service/impl/TableColumnServiceImpl.java b/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/modulars/creater/column/service/impl/TableColumnServiceImpl.java index 7b049183..3080cf92 100644 --- a/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/modulars/creater/column/service/impl/TableColumnServiceImpl.java +++ b/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/modulars/creater/column/service/impl/TableColumnServiceImpl.java @@ -17,7 +17,7 @@ package org.opsli.modulars.creater.column.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.commons.lang3.StringUtils; -import org.opsli.api.utils.ValidationUtil; +import org.opsli.core.utils.ValidationUtil; import org.opsli.common.exception.ServiceException; import org.opsli.core.base.service.impl.CrudServiceImpl; import org.opsli.core.creater.exception.CreaterException; diff --git a/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/modulars/creater/createrlogs/web/CreaterLogsRestController.java b/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/modulars/creater/createrlogs/web/CreaterLogsRestController.java index fecad0c6..dd8bed9a 100644 --- a/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/modulars/creater/createrlogs/web/CreaterLogsRestController.java +++ b/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/modulars/creater/createrlogs/web/CreaterLogsRestController.java @@ -21,33 +21,13 @@ import org.apache.shiro.authz.annotation.RequiresPermissions; import org.opsli.api.base.result.ResultVo; import org.opsli.common.annotation.ApiRestController; import org.opsli.common.annotation.EnableLog; -import org.opsli.common.exception.ServiceException; -import org.opsli.common.utils.WrapperUtil; -import org.opsli.core.base.concroller.BaseRestController; -import org.opsli.core.creater.exception.CreaterException; -import org.opsli.core.creater.msg.CreaterMsg; -import org.opsli.core.creater.strategy.sync.util.SQLSyncUtil; -import org.opsli.core.msg.CoreMsg; -import org.opsli.core.persistence.Page; -import org.opsli.core.persistence.querybuilder.QueryBuilder; -import org.opsli.core.persistence.querybuilder.WebQueryBuilder; -import org.opsli.modulars.creater.column.service.ITableColumnService; -import org.opsli.modulars.creater.column.wrapper.CreaterTableColumnModel; +import org.opsli.core.base.controller.BaseRestController; import org.opsli.modulars.creater.createrlogs.api.CreaterLogsApi; import org.opsli.modulars.creater.createrlogs.entity.CreaterLogs; import org.opsli.modulars.creater.createrlogs.service.ICreateLogsService; import org.opsli.modulars.creater.createrlogs.wrapper.CreaterLogsModel; -import org.opsli.modulars.creater.importable.ImportTableUtil; -import org.opsli.modulars.creater.table.api.TableApi; -import org.opsli.modulars.creater.table.entity.CreaterTable; -import org.opsli.modulars.creater.table.service.ITableService; -import org.opsli.modulars.creater.table.wrapper.CreaterTableAndColumnModel; -import org.opsli.modulars.creater.table.wrapper.CreaterTableModel; -import org.springframework.beans.factory.annotation.Autowired; -import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.util.List; /** diff --git a/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/modulars/creater/table/web/TableRestController.java b/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/modulars/creater/table/web/TableRestController.java index dd345254..40982c5f 100644 --- a/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/modulars/creater/table/web/TableRestController.java +++ b/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/modulars/creater/table/web/TableRestController.java @@ -24,7 +24,7 @@ import org.opsli.common.annotation.ApiRestController; import org.opsli.common.annotation.EnableLog; import org.opsli.common.exception.ServiceException; import org.opsli.common.utils.WrapperUtil; -import org.opsli.core.base.concroller.BaseRestController; +import org.opsli.core.base.controller.BaseRestController; import org.opsli.core.creater.exception.CreaterException; import org.opsli.core.creater.msg.CreaterMsg; import org.opsli.core.creater.strategy.sync.util.SQLSyncUtil; diff --git a/opsli-modulars/opsli-modulars-creater/src/main/resources/tpl/backend/web/TemplateRestController.html b/opsli-modulars/opsli-modulars-creater/src/main/resources/tpl/backend/web/TemplateRestController.html index 4bfdae91..20e2ab39 100644 --- a/opsli-modulars/opsli-modulars-creater/src/main/resources/tpl/backend/web/TemplateRestController.html +++ b/opsli-modulars/opsli-modulars-creater/src/main/resources/tpl/backend/web/TemplateRestController.html @@ -29,7 +29,7 @@ import org.apache.shiro.authz.annotation.RequiresPermissions; import #(apiPath).base.result.ResultVo; import org.opsli.common.annotation.ApiRestController; import org.opsli.common.annotation.EnableLog; -import org.opsli.core.base.concroller.BaseRestController; +import org.opsli.core.base.controller.BaseRestController; import org.opsli.core.persistence.Page; import org.opsli.core.persistence.querybuilder.QueryBuilder; import org.opsli.core.persistence.querybuilder.WebQueryBuilder; diff --git a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/area/web/SysAreaRestController.java b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/area/web/SysAreaRestController.java index e2126326..59ded3fb 100644 --- a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/area/web/SysAreaRestController.java +++ b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/area/web/SysAreaRestController.java @@ -33,7 +33,6 @@ import com.google.common.collect.Sets; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.opsli.api.base.result.ResultVo; import org.opsli.api.web.system.area.SysAreaRestApi; @@ -43,16 +42,14 @@ import org.opsli.common.annotation.EnableLog; import org.opsli.common.annotation.RequiresPermissionsCus; import org.opsli.common.constants.MyBatisConstants; import org.opsli.common.utils.HumpUtil; -import org.opsli.core.base.concroller.BaseRestController; +import org.opsli.core.base.controller.BaseRestController; import org.opsli.core.base.entity.HasChildren; import org.opsli.core.persistence.querybuilder.GenQueryBuilder; import org.opsli.core.persistence.querybuilder.QueryBuilder; import org.opsli.core.persistence.querybuilder.WebQueryBuilder; -import org.opsli.core.utils.SpringContextHolder; import org.opsli.modulars.system.area.entity.SysArea; import org.opsli.modulars.system.area.service.ISysAreaService; import org.springframework.core.io.ClassPathResource; -import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.multipart.MultipartHttpServletRequest; import javax.servlet.http.HttpServletRequest; diff --git a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/dict/web/DictDetailRestController.java b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/dict/web/DictDetailRestController.java index 1f52c2bd..8a9019ed 100644 --- a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/dict/web/DictDetailRestController.java +++ b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/dict/web/DictDetailRestController.java @@ -20,6 +20,7 @@ import cn.hutool.core.util.ReflectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.opsli.api.base.result.ResultVo; import org.opsli.api.web.system.dict.DictDetailApi; @@ -30,7 +31,7 @@ import org.opsli.common.annotation.EnableLog; import org.opsli.common.annotation.RequiresPermissionsCus; import org.opsli.common.constants.MyBatisConstants; import org.opsli.common.exception.ServiceException; -import org.opsli.core.base.concroller.BaseRestController; +import org.opsli.core.base.controller.BaseRestController; import org.opsli.core.persistence.Page; import org.opsli.core.persistence.querybuilder.GenQueryBuilder; import org.opsli.core.persistence.querybuilder.QueryBuilder; @@ -129,7 +130,7 @@ public class DictDetailRestController extends BaseRestController menuList = IService.findList(queryBuilder.build()); menuModelList = WrapperUtil.transformInstance(menuList, modelClazz); }else { diff --git a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/org/web/SysOrgRestController.java b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/org/web/SysOrgRestController.java index 830fb8e5..25c6530f 100644 --- a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/org/web/SysOrgRestController.java +++ b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/org/web/SysOrgRestController.java @@ -36,7 +36,7 @@ import org.opsli.common.annotation.RequiresPermissionsCus; import org.opsli.common.constants.MyBatisConstants; import org.opsli.common.utils.HumpUtil; import org.opsli.common.utils.WrapperUtil; -import org.opsli.core.base.concroller.BaseRestController; +import org.opsli.core.base.controller.BaseRestController; import org.opsli.core.base.entity.HasChildren; import org.opsli.core.persistence.querybuilder.GenQueryBuilder; import org.opsli.core.persistence.querybuilder.QueryBuilder; diff --git a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/web/RoleMenuRefRestController.java b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/web/RoleMenuRefRestController.java index 414d0f31..bd67afb4 100644 --- a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/web/RoleMenuRefRestController.java +++ b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/web/RoleMenuRefRestController.java @@ -17,6 +17,7 @@ package org.opsli.modulars.system.role.web; import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.opsli.api.base.result.ResultVo; import org.opsli.api.web.system.role.RoleMenuRefApi; @@ -116,7 +117,7 @@ public class RoleMenuRefRestController implements RoleMenuRefApi { // 内置数据 只有超级管理员可以修改 if(roleModel != null && LOCK_DATA.equals(roleModel.getIzLock()) ){ UserModel user = UserUtil.getUser(); - if(!UserUtil.SUPER_ADMIN.equals(user.getUsername())){ + if(!StringUtils.equals(UserUtil.SUPER_ADMIN, user.getUsername())){ throw new ServiceException(SystemMsg.EXCEPTION_LOCK_DATA); } } @@ -140,7 +141,7 @@ public class RoleMenuRefRestController implements RoleMenuRefApi { private void demoError(){ UserModel user = UserUtil.getUser(); // 演示模式 不允许操作 (超级管理员可以操作) - if(enableDemo && !UserUtil.SUPER_ADMIN.equals(user.getUsername())){ + if(enableDemo && !StringUtils.equals(UserUtil.SUPER_ADMIN, user.getUsername())){ throw new ServiceException(CoreMsg.EXCEPTION_ENABLE_DEMO); } } diff --git a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/web/RoleRestController.java b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/web/RoleRestController.java index c3e91058..95f61434 100644 --- a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/web/RoleRestController.java +++ b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/web/RoleRestController.java @@ -20,6 +20,7 @@ import cn.hutool.core.util.ReflectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.opsli.api.base.result.ResultVo; import org.opsli.api.web.system.role.RoleApi; @@ -30,7 +31,7 @@ import org.opsli.common.annotation.EnableLog; import org.opsli.common.annotation.RequiresPermissionsCus; import org.opsli.common.constants.MyBatisConstants; import org.opsli.common.exception.ServiceException; -import org.opsli.core.base.concroller.BaseRestController; +import org.opsli.core.base.controller.BaseRestController; import org.opsli.core.persistence.Page; import org.opsli.core.persistence.querybuilder.GenQueryBuilder; import org.opsli.core.persistence.querybuilder.QueryBuilder; @@ -132,7 +133,7 @@ public class RoleRestController extends BaseRestController implements UserApi { - @Value("${opsli.web.upload-path}") - private String basedir; - @Value("${opsli.default-pass}") - private String defaultPass; - @Autowired private ISysOrgService iSysOrgService; @@ -125,7 +119,7 @@ public class UserRestController extends BaseRestController1.6.0 3.1.0 1.27 + 1.68 @@ -143,6 +144,13 @@ spring-boot-starter-validation + + org.springframework.boot + spring-boot-configuration-processor + true + + + + + org.bouncycastle + bcprov-jdk15to18 + ${bouncycastle.version} + + + org.yaml