diff --git a/aos-common/pom.xml b/aos-common/pom.xml
index 3a2cfd3..384ba33 100644
--- a/aos-common/pom.xml
+++ b/aos-common/pom.xml
@@ -3,9 +3,10 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- aos-core
+ aos-dependencies
com.aos
1.0-SNAPSHOT
+ ../aos-dependencies/pom.xml
4.0.0
@@ -15,5 +16,18 @@
8
8
-
+
+
+ io.jsonwebtoken
+ jjwt
+
+
+ com.google.guava
+ guava
+
+
+ com.alibaba
+ transmittable-thread-local
+
+
\ No newline at end of file
diff --git a/aos-common/src/main/java/com/aos/common/model/ResultCodeInterface.java b/aos-common/src/main/java/com/aos/common/model/ResultCodeInterface.java
new file mode 100644
index 0000000..a3486c0
--- /dev/null
+++ b/aos-common/src/main/java/com/aos/common/model/ResultCodeInterface.java
@@ -0,0 +1,29 @@
+package com.aos.common.model;
+
+/**
+ * 错误码接口
+ *
+ * @author wangyl
+ * @version V1.0
+ * @ClassName: ResultCodeInterface
+ * @Date: 2022/1/6 16:26
+ */
+public interface ResultCodeInterface {
+ /**
+ * @return java.lang.Integer
+ * @Description 获取错误码
+ * @Date 2020/11/8 15:37
+ * @Author wangyl
+ * @Version V1.0
+ */
+ String getCode();
+
+ /**
+ * @return java.lang.String
+ * @Description 获取错误信息
+ * @Date 2020/11/8 15:38
+ * @Author wangyl
+ * @Version V1.0
+ */
+ String getMsg();
+}
diff --git a/aos-common/src/main/java/com/aos/common/model/context/CurrentUserContextHolder.java b/aos-common/src/main/java/com/aos/common/model/context/CurrentUserContextHolder.java
new file mode 100644
index 0000000..e2e1d86
--- /dev/null
+++ b/aos-common/src/main/java/com/aos/common/model/context/CurrentUserContextHolder.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2004, 2005, 2006 Acegi Technology Pty Limited
+ *
+ * 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
+ *
+ * https://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 com.aos.common.model.context;
+
+import com.alibaba.ttl.TransmittableThreadLocal;
+
+import java.util.Objects;
+
+/**
+ * @author: wangyl
+ * @date: 2022/11/3
+ * @description: 用户信息上下文
+ */
+public class CurrentUserContextHolder {
+ private static ThreadLocal userHolder = new TransmittableThreadLocal<>();
+
+ /**
+ * 清空
+ */
+ public static void clearContext() {
+ userHolder.remove();
+ }
+
+ /**
+ * 删除
+ */
+ public static SecurityUserInfo getContext() {
+ SecurityUserInfo securityUserInfo = userHolder.get();
+ if (Objects.isNull(securityUserInfo)) {
+ securityUserInfo = new SecurityUserInfo();
+ }
+ return securityUserInfo;
+ }
+
+ /**
+ * 设置
+ */
+ public static void setContext(SecurityUserInfo context) {
+ userHolder.set(context);
+ }
+
+}
diff --git a/aos-common/src/main/java/com/aos/common/model/context/SecurityUserInfo.java b/aos-common/src/main/java/com/aos/common/model/context/SecurityUserInfo.java
new file mode 100644
index 0000000..d6423ea
--- /dev/null
+++ b/aos-common/src/main/java/com/aos/common/model/context/SecurityUserInfo.java
@@ -0,0 +1,30 @@
+package com.aos.common.model.context;
+
+import lombok.Data;
+
+/**
+ * @author wangyl
+ * @version V1.0
+ * @ClassName: SecurityUserInfo
+ * @Function: 认证的用户信息
+ * @Date: 2019/12/17 21:24
+ */
+@Data
+public class SecurityUserInfo {
+ /**
+ * 用户名
+ */
+ private String username = "未知";
+ /**
+ * 登录id
+ */
+ private Long loginId = -1L;
+ /**
+ * 邮箱
+ */
+ private String email = "";
+ /**
+ * 手机号
+ */
+ private String phone = "";
+}
diff --git a/aos-common/src/main/java/com/aos/common/model/exception/AosBaseBizException.java b/aos-common/src/main/java/com/aos/common/model/exception/AosBaseBizException.java
new file mode 100644
index 0000000..333c962
--- /dev/null
+++ b/aos-common/src/main/java/com/aos/common/model/exception/AosBaseBizException.java
@@ -0,0 +1,71 @@
+package com.aos.common.model.exception;
+
+import com.aos.common.model.ResultCodeInterface;
+import lombok.Data;
+
+/**
+ * 统一异常
+ *
+ * @author wyl
+ * @version V1.0
+ * @ClassName: BizException
+ * @Date: 2020/4/12 20:13
+ */
+@Data
+public class AosBaseBizException extends RuntimeException {
+
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 错误码
+ */
+ protected String errorCode;
+ /**
+ * 错误信息
+ */
+ protected String errorMsg;
+
+ public AosBaseBizException() {
+ super();
+ }
+
+ public AosBaseBizException(ResultCodeInterface resultCode) {
+ super(resultCode.getCode());
+ this.errorCode = resultCode.getCode();
+ this.errorMsg = resultCode.getMsg();
+ }
+
+ public AosBaseBizException(ResultCodeInterface resultCode, Throwable cause) {
+ super(resultCode.getCode(), cause);
+ this.errorCode = resultCode.getCode();
+ this.errorMsg = resultCode.getMsg();
+ }
+
+ public AosBaseBizException(String errorMsg) {
+ super(errorMsg);
+ this.errorMsg = errorMsg;
+ }
+
+ public AosBaseBizException(String errorCode, String errorMsg) {
+ super(errorCode.toString());
+ this.errorCode = errorCode;
+ this.errorMsg = errorMsg;
+ }
+
+ public AosBaseBizException(String errorCode, String errorMsg, Throwable cause) {
+ super(errorCode.toString(), cause);
+ this.errorCode = errorCode;
+ this.errorMsg = errorMsg;
+ }
+
+ @Override
+ public String getMessage() {
+ return errorMsg;
+ }
+
+ @Override
+ public Throwable fillInStackTrace() {
+ return this;
+ }
+}
diff --git a/aos-common/src/main/java/com/aos/common/model/result/ResultCode.java b/aos-common/src/main/java/com/aos/common/model/result/ResultCode.java
new file mode 100644
index 0000000..8b4dd38
--- /dev/null
+++ b/aos-common/src/main/java/com/aos/common/model/result/ResultCode.java
@@ -0,0 +1,28 @@
+package com.aos.common.model.result;
+
+import com.aos.common.model.ResultCodeInterface;
+
+public enum ResultCode implements ResultCodeInterface {
+ /**
+ *
+ */
+ SUCCEED("200", "成功"),
+ FAILED("-1", "系统异常");
+ private String code;
+ private String msg;
+
+ ResultCode(String code, String msg) {
+ this.code = code;
+ this.msg = msg;
+ }
+
+ @Override
+ public String getCode() {
+ return code;
+ }
+
+ @Override
+ public String getMsg() {
+ return msg;
+ }
+}
diff --git a/aos-common/src/main/java/com/aos/common/model/result/WebResult.java b/aos-common/src/main/java/com/aos/common/model/result/WebResult.java
new file mode 100644
index 0000000..2020b70
--- /dev/null
+++ b/aos-common/src/main/java/com/aos/common/model/result/WebResult.java
@@ -0,0 +1,51 @@
+package com.aos.common.model.result;
+
+import com.aos.common.model.ResultCodeInterface;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author wangyl
+ * @version V1.0
+ * @ClassName: WebResult
+ * @Function: 返回对象
+ * @Date: 2020/3/27 10:49
+ */
+@Getter
+@Setter
+public class WebResult {
+ /**
+ * 返回码
+ */
+ private String code;
+ /**
+ * 描述信息
+ */
+ private String msg;
+ /**
+ * 返回数据
+ */
+ private T data;
+
+ public WebResult() {
+
+ }
+
+ public WebResult(String code, String msg, T data) {
+ this.code = code;
+ this.msg = msg;
+ this.data = data;
+ }
+
+ public WebResult(ResultCodeInterface resultCode) {
+ this(resultCode, null);
+ }
+
+ public WebResult(ResultCodeInterface resultCode, T data) {
+ this(resultCode.getCode(), resultCode.getMsg(), data);
+ }
+
+ public WebResult(String code, String msg) {
+ this(code, msg, null);
+ }
+}
diff --git a/aos-common/src/main/java/com/aos/common/thread/TtlThreadPool.java b/aos-common/src/main/java/com/aos/common/thread/TtlThreadPool.java
new file mode 100644
index 0000000..8a09f5f
--- /dev/null
+++ b/aos-common/src/main/java/com/aos/common/thread/TtlThreadPool.java
@@ -0,0 +1,20 @@
+package com.aos.common.thread;
+
+import com.alibaba.ttl.TtlRunnable;
+import lombok.Builder;
+
+import java.util.concurrent.ThreadPoolExecutor;
+
+/**
+ * @author: wangyl
+ * @date: 2022/11/4
+ * @description: ttl的线程池
+ */
+@Builder
+public class TtlThreadPool extends ThreadPoolExecutor {
+
+ @Override
+ public void execute(Runnable command) {
+ TtlRunnable.get(command);
+ }
+}
diff --git a/aos-common/src/main/java/com/aos/common/token/TokenUtilBase.java b/aos-common/src/main/java/com/aos/common/token/TokenUtilBase.java
new file mode 100644
index 0000000..2dd9f38
--- /dev/null
+++ b/aos-common/src/main/java/com/aos/common/token/TokenUtilBase.java
@@ -0,0 +1,189 @@
+/**
+ * @Author wangyl
+ * @E-mail wangyl@dsgdata.com
+ **/
+package com.aos.common.token;
+
+import com.google.common.base.Strings;
+import io.jsonwebtoken.Claims;
+import io.jsonwebtoken.Jwts;
+import io.jsonwebtoken.SignatureAlgorithm;
+
+import javax.crypto.SecretKey;
+import javax.crypto.spec.SecretKeySpec;
+import java.util.Base64;
+import java.util.Date;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * @author wyl
+ * @version V1.0
+ * @ClassName: TokenUtilBase
+ * @Function: 提供部分jwt 基础接口
+ * @Date: 2019/12/17 0:36
+ */
+public class TokenUtilBase {
+
+ /**
+ * 生成一个token
+ *
+ * @param claims 需要存储的信息
+ * @param expireTime 设置token的超时时间
+ * @return java.lang.String
+ * @Date 2019/12/17 1:02
+ * @Author wangyl
+ * @Version V1.0
+ */
+ public static String generateToken(Map claims, Long expireTime, String jwtSecret) {
+ Date expirationDate = generalExpirationDate(expireTime);
+ return Jwts.builder()
+ .setClaims(claims)
+ .setExpiration(expirationDate)
+ .signWith(SignatureAlgorithm.HS512, generalKey(jwtSecret))
+ .compact();
+ }
+
+ /**
+ * 使用默认的密钥,默认超时时间 生成token
+ *
+ * @param claims
+ * @return java.lang.String
+ * @Date 2022/11/3
+ * @Author wangyl
+ */
+ public static String generateToken(Map claims) {
+ return generateToken(claims, null, null);
+ }
+
+ /**
+ * 使用默认的密钥,指定超时时间 生成token
+ *
+ * @param claims
+ * @param expireTime
+ * @return java.lang.String
+ * @Date 2022/11/3
+ * @Author wangyl
+ */
+ public static String generateToken(Map claims, Long expireTime) {
+ return generateToken(claims, expireTime, null);
+ }
+
+ /**
+ * 使用默认的超时时间,指定密钥 生成token
+ *
+ * @param claims 需要存储的信息
+ * @return java.lang.String
+ * @Date 2019/12/17 20:38
+ * @Author wangyl
+ * @Version V1.0
+ */
+ public static String generateToken(Map claims, String jwtSecret) {
+ return generateToken(claims, null, jwtSecret);
+ }
+
+
+ /**
+ * 从Token中获取Claims信息
+ *
+ * @param token
+ * @return io.jsonwebtoken.Claims
+ * @Date 2019/12/17 13:24
+ * @Author wangyl
+ * @Version V1.0
+ */
+ public static Claims getClaimsFromToken(String token, String jwtSecret) {
+ Claims claims = Jwts.parser()
+ .setSigningKey(generalKey(jwtSecret))
+ .parseClaimsJws(token)
+ .getBody();
+ return claims;
+ }
+
+ /**
+ * 从Token中获取Claims信息
+ *
+ * @param token
+ * @return io.jsonwebtoken.Claims
+ * @Date 2019/12/17 13:24
+ * @Author wangyl
+ * @Version V1.0
+ */
+ public static Claims getClaimsFromToken(String token) {
+ return getClaimsFromToken(token, null);
+ }
+
+ /**
+ * @param token
+ * @return java.lang.Boolean
+ * @Description 判断Token是否时效
+ * @Date 2019/12/17 13:41
+ * @Author wangyl
+ * @Version V1.0
+ */
+ public Boolean tokenExpired(String token, String jwtSecret) {
+ Claims claims = getClaimsFromToken(token, jwtSecret);
+ Date expiration = claims.getExpiration();
+ return expiration.after(new Date());
+ }
+
+
+ /**
+ * 判断Token是否时效
+ *
+ * @param token
+ * @return java.lang.Boolean
+ * @Date 2019/12/17 13:41
+ * @Author wangyl
+ * @Version V1.0
+ */
+ public Boolean tokenExpired(String token) {
+ return tokenExpired(token, null);
+ }
+
+ /**
+ * @param
+ * @return javax.crypto.SecretKey
+ * @Description 通过Base64加密生成秘钥
+ * @Date 2019/12/17 0:56
+ * @Author wangyl
+ * @Version V1.0
+ */
+ private static SecretKey generalKey(String jwtSecret) {
+ if (Strings.isNullOrEmpty(jwtSecret)) {
+ jwtSecret = TokenConstant.jwtSecret;
+ }
+ byte[] encodedKey = Base64.getDecoder().decode(jwtSecret);
+ SecretKey key = new SecretKeySpec(encodedKey, 0, encodedKey.length, "AES");
+ return key;
+ }
+
+ /**
+ * 生成超时时间
+ *
+ * @param expireTime
+ * @return java.util.Date
+ * @Date 2022/11/3
+ * @Author wangyl
+ */
+ private static Date generalExpirationDate(Long expireTime) {
+ if (Objects.isNull(expireTime) || Objects.equals(expireTime, 0L)) {
+ expireTime = TokenConstant.expireTime;
+ }
+ Date expirationDate = new Date(System.currentTimeMillis() + expireTime);
+ return expirationDate;
+ }
+}
+
+class TokenConstant {
+ /**
+ * 密钥
+ */
+ final static String jwtSecret = "wylaigyx";
+ /**
+ * 默认有效期1小时
+ */
+ final static long expireTime = 60 * 60 * 1000;
+
+}
+
diff --git a/aos-dependencies/pom.xml b/aos-dependencies/pom.xml
index 8d8393b..6f6b0a5 100644
--- a/aos-dependencies/pom.xml
+++ b/aos-dependencies/pom.xml
@@ -6,6 +6,7 @@
aos-core
com.aos
1.0-SNAPSHOT
+ ../pom.xml
4.0.0
aos-dependencies
@@ -30,6 +31,8 @@
2.2.7.RELEASE
Hoxton.SR12
2.3.12.RELEASE
+ 0.9.1
+ 2.11.4
@@ -75,7 +78,12 @@
mybatis-plus-extension
${mybatis-plus.version}
-
+
+
+ com.google.guava
+ guava
+ ${guava.version}
+
io.springfox
@@ -98,6 +106,19 @@
knife4j-spring-ui
${swagger-bootstrap-ui.knife4j.version}
+
+
+ io.jsonwebtoken
+ jjwt
+ ${jjwt.version}
+
+
+
+ com.alibaba
+ transmittable-thread-local
+ ${ttl.version}
+
+
@@ -105,7 +126,6 @@
org.projectlombok
lombok
1.18.24
- provided
org.slf4j
@@ -113,18 +133,26 @@
1.7.30
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+ 3.0.0
+
+ true
+
+
+
+ compile
+
+ jar
+
+
+
+
+
+
-
-
- nexus
- releases
- https://maven.wylgyx.top/repository/maven-releases/
-
-
- nexus
- snapshots
- https://maven.wylgyx.top/repository/maven-snapshots/
-
-
\ No newline at end of file
diff --git a/aos-log/pom.xml b/aos-log/pom.xml
index a20e038..1c3f490 100644
--- a/aos-log/pom.xml
+++ b/aos-log/pom.xml
@@ -3,9 +3,10 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- aos-core
+ aos-dependencies
com.aos
1.0-SNAPSHOT
+ ../aos-dependencies/pom.xml
4.0.0
diff --git a/aos-swagger/pom.xml b/aos-swagger/pom.xml
new file mode 100644
index 0000000..8ecb5fb
--- /dev/null
+++ b/aos-swagger/pom.xml
@@ -0,0 +1,39 @@
+
+
+
+ aos-dependencies
+ com.aos
+ 1.0-SNAPSHOT
+ ../aos-dependencies/pom.xml
+
+ 4.0.0
+
+ aos-swagger
+
+
+ 8
+ 8
+
+
+
+
+ io.springfox
+ springfox-swagger2
+
+
+ io.swagger
+ swagger-annotations
+
+
+
+ io.springfox
+ springfox-swagger-ui
+
+
+ com.github.xiaoymin
+ knife4j-spring-ui
+
+
+
\ No newline at end of file
diff --git a/aos-swagger/src/main/java/com/aos/swagger/conf/SwaggerConfig.java b/aos-swagger/src/main/java/com/aos/swagger/conf/SwaggerConfig.java
new file mode 100644
index 0000000..d18d294
--- /dev/null
+++ b/aos-swagger/src/main/java/com/aos/swagger/conf/SwaggerConfig.java
@@ -0,0 +1,71 @@
+package com.aos.swagger.conf;
+
+import com.aos.swagger.enable.EnableSwagger;
+import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
+import org.springframework.beans.factory.support.BeanDefinitionRegistry;
+import org.springframework.context.annotation.AnnotationConfigApplicationContext;
+import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
+import org.springframework.core.type.AnnotationMetadata;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author: zeng li liang
+ * @date: 2022/4/21
+ * @description:
+ */
+public class SwaggerConfig implements ImportBeanDefinitionRegistrar {
+
+ @Override
+ public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) {
+
+ //获取EnableEcho注解的所有属性的value
+ Map attributes = annotationMetadata.getAnnotationAttributes(EnableSwagger.class.getName());
+ //获取package属性的value
+ List applicationNames = Arrays.asList((String[]) attributes.get("applicationName"));
+ List scanPackagesPaths = Arrays.asList((String[]) attributes.get("scanPackagesPath"));
+ int size = applicationNames.size();
+ for (int i = 0; i < size; i++) {
+ //使用beanDefinitionRegistry对象将EchoBeanPostProcessor注入至Spring容器中
+ String applicationName = applicationNames.get(i);
+ String scanPackagesPath = scanPackagesPaths.get(i);
+
+ beanDefinitionRegistry.registerBeanDefinition(applicationName, beanDefinitionBuilder.getBeanDefinition());
+ AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext();
+ ConfigurableListableBeanFactory beanFactory = annotationConfigApplicationContext.getBeanFactory();
+ beanFactory.registerSingleton();
+ }
+
+ }
+
+
+ // @Value("${spring.application.name}")
+// private String applicationName;
+//
+ public Docket createRestApi(String applicationName) {
+ return new Docket(DocumentationType.SWAGGER_2)
+ .apiInfo(apiInfo(applicationName))
+ .groupName(applicationName)
+ .select()
+ .apis(RequestHandlerSelectors.basePackage("com.asura"))
+ .paths(PathSelectors.any())
+ .build();
+ }
+
+ private ApiInfo apiInfo(String applicationName) {
+ return new ApiInfoBuilder()
+ .title(applicationName + " swagger apis")
+ .description("swagger-bootstrap-ui")
+ .termsOfServiceUrl("")
+ .version("1.0")
+ .build();
+ }
+}
diff --git a/aos-swagger/src/main/java/com/aos/swagger/enable/EnableSwagger.java b/aos-swagger/src/main/java/com/aos/swagger/enable/EnableSwagger.java
new file mode 100644
index 0000000..83673e1
--- /dev/null
+++ b/aos-swagger/src/main/java/com/aos/swagger/enable/EnableSwagger.java
@@ -0,0 +1,27 @@
+package com.aos.swagger.enable;
+
+import com.aos.swagger.conf.SwaggerConfig;
+import org.springframework.context.annotation.Import;
+
+import java.lang.annotation.*;
+
+/**
+ * @author: wangyl
+ * @date: 2022/11/4
+ * @description: 启动swagger的注解
+ */
+@Target({ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+@Import({SwaggerConfig.class})
+public @interface EnableSwagger {
+ /**
+ * swagger显示的名称
+ *
+ * @param
+ * @return java.lang.String
+ * @Date 2022/11/4
+ * @Author wangyl
+ */
+ String applicationName();
+}
diff --git a/aos-web/pom.xml b/aos-web/pom.xml
new file mode 100644
index 0000000..2b51990
--- /dev/null
+++ b/aos-web/pom.xml
@@ -0,0 +1,39 @@
+
+
+
+ aos-dependencies
+ com.aos
+ 1.0-SNAPSHOT
+ ../aos-dependencies/pom.xml
+
+ 4.0.0
+
+ aos-web
+
+
+ 8
+ 8
+
+
+
+
+ io.springfox
+ springfox-swagger2
+
+
+ io.swagger
+ swagger-annotations
+
+
+
+ io.springfox
+ springfox-swagger-ui
+
+
+ com.github.xiaoymin
+ knife4j-spring-ui
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 902412f..d36eb4e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,7 +14,20 @@
aos-common
aos-feign
aos-log
- aos-common
+ aos-swagger
+ aos-web
pom
+
+
+ nexus
+ releases
+ https://maven.wylgyx.top/repository/maven-releases/
+
+
+ nexus
+ snapshots
+ https://maven.wylgyx.top/repository/maven-snapshots/
+
+