diff --git a/idp/frontend/src/views/login/ThirdPartyLogin.vue b/idp/frontend/idp/src/views/login/ThirdPartyLogin.vue
similarity index 100%
rename from idp/frontend/src/views/login/ThirdPartyLogin.vue
rename to idp/frontend/idp/src/views/login/ThirdPartyLogin.vue
diff --git a/idp/frontend/src/vite-env.d.ts b/idp/frontend/idp/src/vite-env.d.ts
similarity index 100%
rename from idp/frontend/src/vite-env.d.ts
rename to idp/frontend/idp/src/vite-env.d.ts
diff --git a/idp/frontend/tsconfig.json b/idp/frontend/idp/tsconfig.json
similarity index 100%
rename from idp/frontend/tsconfig.json
rename to idp/frontend/idp/tsconfig.json
diff --git a/idp/frontend/tsconfig.node.json b/idp/frontend/idp/tsconfig.node.json
similarity index 100%
rename from idp/frontend/tsconfig.node.json
rename to idp/frontend/idp/tsconfig.node.json
diff --git a/idp/frontend/vite-env.d.ts b/idp/frontend/idp/vite-env.d.ts
similarity index 100%
rename from idp/frontend/vite-env.d.ts
rename to idp/frontend/idp/vite-env.d.ts
diff --git a/idp/frontend/vite.config.ts b/idp/frontend/idp/vite.config.ts
similarity index 100%
rename from idp/frontend/vite.config.ts
rename to idp/frontend/idp/vite.config.ts
diff --git a/idp/frontend/vite/plugins/auto-import.ts b/idp/frontend/idp/vite/plugins/auto-import.ts
similarity index 100%
rename from idp/frontend/vite/plugins/auto-import.ts
rename to idp/frontend/idp/vite/plugins/auto-import.ts
diff --git a/idp/frontend/vite/plugins/compression.ts b/idp/frontend/idp/vite/plugins/compression.ts
similarity index 100%
rename from idp/frontend/vite/plugins/compression.ts
rename to idp/frontend/idp/vite/plugins/compression.ts
diff --git a/idp/frontend/vite/plugins/index.ts b/idp/frontend/idp/vite/plugins/index.ts
similarity index 100%
rename from idp/frontend/vite/plugins/index.ts
rename to idp/frontend/idp/vite/plugins/index.ts
diff --git a/idp/frontend/vite/plugins/setup-extend.ts b/idp/frontend/idp/vite/plugins/setup-extend.ts
similarity index 100%
rename from idp/frontend/vite/plugins/setup-extend.ts
rename to idp/frontend/idp/vite/plugins/setup-extend.ts
diff --git a/idp/frontend/vite/plugins/svg-icon.ts b/idp/frontend/idp/vite/plugins/svg-icon.ts
similarity index 100%
rename from idp/frontend/vite/plugins/svg-icon.ts
rename to idp/frontend/idp/vite/plugins/svg-icon.ts
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..843a6d4
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,18 @@
+
+
+ 4.0.0
+
+ org.lingniu
+ lingniu-platform
+ 1.0-SNAPSHOT
+
+ pom
+
+ 8
+ 8
+ UTF-8
+
+
+
\ No newline at end of file
diff --git a/portal/backend/portal/.gitignore b/portal/backend/portal/.gitignore
new file mode 100644
index 0000000..ed8368a
--- /dev/null
+++ b/portal/backend/portal/.gitignore
@@ -0,0 +1,47 @@
+######################################################################
+# Build Tools
+
+.gradle
+/build/
+!gradle/wrapper/gradle-wrapper.jar
+
+target/
+!.mvn/wrapper/maven-wrapper.jar
+
+######################################################################
+# IDE
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### JRebel ###
+rebel.xml
+
+### NetBeans ###
+nbproject/private/
+build/*
+nbbuild/
+dist/
+nbdist/
+.nb-gradle/
+
+######################################################################
+# Others
+*.log
+*.xml.versionsBackup
+*.swp
+
+!*/build/*.java
+!*/build/*.html
+!*/build/*.xml
diff --git a/portal/backend/README.md b/portal/backend/portal/README.md
similarity index 100%
rename from portal/backend/README.md
rename to portal/backend/portal/README.md
diff --git a/portal/backend/pom.xml b/portal/backend/portal/pom.xml
similarity index 100%
rename from portal/backend/pom.xml
rename to portal/backend/portal/pom.xml
diff --git a/portal/backend/portal-admin/pom.xml b/portal/backend/portal/portal-admin/pom.xml
similarity index 100%
rename from portal/backend/portal-admin/pom.xml
rename to portal/backend/portal/portal-admin/pom.xml
diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/PortalApplication.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/PortalApplication.java
similarity index 100%
rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/PortalApplication.java
rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/PortalApplication.java
diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/PortalServletInitializer.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/PortalServletInitializer.java
similarity index 100%
rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/PortalServletInitializer.java
rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/PortalServletInitializer.java
diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/common/CommonController.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/common/CommonController.java
similarity index 100%
rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/common/CommonController.java
rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/common/CommonController.java
diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/CacheController.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/CacheController.java
similarity index 100%
rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/CacheController.java
rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/CacheController.java
diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/ServerController.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/ServerController.java
similarity index 100%
rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/ServerController.java
rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/ServerController.java
diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/SysLogininforController.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/SysLogininforController.java
similarity index 100%
rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/SysLogininforController.java
rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/SysLogininforController.java
diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/SysOperlogController.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/SysOperlogController.java
similarity index 100%
rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/SysOperlogController.java
rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/SysOperlogController.java
diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/SysUserOnlineController.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/SysUserOnlineController.java
similarity index 100%
rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/SysUserOnlineController.java
rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/monitor/SysUserOnlineController.java
diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysConfigController.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysConfigController.java
similarity index 100%
rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysConfigController.java
rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysConfigController.java
diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysDeptController.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysDeptController.java
similarity index 100%
rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysDeptController.java
rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysDeptController.java
diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysDictDataController.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysDictDataController.java
similarity index 100%
rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysDictDataController.java
rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysDictDataController.java
diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysDictTypeController.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysDictTypeController.java
similarity index 100%
rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysDictTypeController.java
rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysDictTypeController.java
diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysIndexController.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysIndexController.java
similarity index 100%
rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysIndexController.java
rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysIndexController.java
diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysMenuController.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysMenuController.java
similarity index 100%
rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysMenuController.java
rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysMenuController.java
diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysNoticeController.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysNoticeController.java
similarity index 100%
rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysNoticeController.java
rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysNoticeController.java
diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysPostController.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysPostController.java
similarity index 100%
rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysPostController.java
rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysPostController.java
diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysProfileController.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysProfileController.java
similarity index 100%
rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysProfileController.java
rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysProfileController.java
diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysRegisterController.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysRegisterController.java
similarity index 100%
rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysRegisterController.java
rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysRegisterController.java
diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysRoleController.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysRoleController.java
similarity index 100%
rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysRoleController.java
rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysRoleController.java
diff --git a/portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysUserController.java b/portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysUserController.java
similarity index 100%
rename from portal/backend/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysUserController.java
rename to portal/backend/portal/portal-admin/src/main/java/org/lingniu/portal/web/controller/system/SysUserController.java
diff --git a/portal/backend/portal-admin/src/main/resources/META-INF/spring-devtools.properties b/portal/backend/portal/portal-admin/src/main/resources/META-INF/spring-devtools.properties
similarity index 100%
rename from portal/backend/portal-admin/src/main/resources/META-INF/spring-devtools.properties
rename to portal/backend/portal/portal-admin/src/main/resources/META-INF/spring-devtools.properties
diff --git a/portal/backend/portal-admin/target/classes/application-local.yml b/portal/backend/portal/portal-admin/src/main/resources/application-local.yml
similarity index 79%
rename from portal/backend/portal-admin/target/classes/application-local.yml
rename to portal/backend/portal/portal-admin/src/main/resources/application-local.yml
index 29f5158..09d8f54 100644
--- a/portal/backend/portal-admin/target/classes/application-local.yml
+++ b/portal/backend/portal/portal-admin/src/main/resources/application-local.yml
@@ -1,9 +1,12 @@
# 数据源配置
spring:
datasource:
- url: jdbc:mysql://localhost:3306/portal?useUnicode=true&characterEncoding=utf-8&useSSL=false
- username: root
- password: Zhang!@#
+# url: jdbc:mysql://localhost:3306/portal?useUnicode=true&characterEncoding=utf-8&useSSL=false
+# username: root
+# password: Zhang!@#
+# url: jdbc:mysql://106.14.217.120:3306/platform?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例
+# username: lingniu
+# password: Lingniu2026!
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
druid:
@@ -12,6 +15,9 @@ spring:
# url: jdbc:mysql://localhost:3306/portal?useUnicode=true&characterEncoding=utf-8&useSSL=false
# username: root
# password: Zhang!@#
+ url: jdbc:mysql://106.14.217.120:3306/platform?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例
+ username: lingniu
+ password: Lingniu2026!
# 初始连接数
initialSize: 5
# 最小连接池数量
@@ -59,7 +65,7 @@ spring:
oauth2:
resourceserver:
jwt:
- jwk-set-uri: http://localhost:8000/oauth2/jwks
+ jwk-set-uri: http://localhost:8082/oauth2/jwks
client:
registration:
portal:
@@ -82,4 +88,4 @@ spring:
token-uri: http://localhost:8000/oauth2/token
user-info-uri: http://localhost:8000/userinfo
jwk-set-uri: http://localhost:8000/oauth2/jwks
- user-name-attribute: sub
\ No newline at end of file
+ user-name-attribute: sub
diff --git a/portal/backend/portal-admin/src/main/resources/application-test.yml b/portal/backend/portal/portal-admin/src/main/resources/application-test.yml
similarity index 84%
rename from portal/backend/portal-admin/src/main/resources/application-test.yml
rename to portal/backend/portal/portal-admin/src/main/resources/application-test.yml
index c0ac2b3..5856b2f 100644
--- a/portal/backend/portal-admin/src/main/resources/application-test.yml
+++ b/portal/backend/portal/portal-admin/src/main/resources/application-test.yml
@@ -1,7 +1,7 @@
# 数据源配置
spring:
datasource:
- url: jdbc:mysql://localhost:3306/platform?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例
+ url: jdbc:mysql://106.14.217.120:3306/platform?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例
username: lingniu
password: Lingniu2026!
type: com.alibaba.druid.pool.DruidDataSource
@@ -59,7 +59,7 @@ spring:
oauth2:
resourceserver:
jwt:
- jwk-set-uri: http://localhost:8000/oauth2/jwks
+ jwk-set-uri: http://127.0.0.1:8082/oauth2/jwks
client:
registration:
portal:
@@ -77,9 +77,9 @@ spring:
provider:
idp:
- # issuer-uri: http://localhost:8000
+ issuer-uri: http://127.0.0.1:8082
authorization-uri: http://106.14.217.120/idp-ui/sso
- token-uri: http://localhost:8082/oauth2/token
- user-info-uri: http://localhost:8082/userinfo
- jwk-set-uri: http://localhost:8082/oauth2/jwks
+ token-uri: http://127.0.0.1:8082/oauth2/token
+ user-info-uri: http://127.0.0.1:8082/userinfo
+ jwk-set-uri: http://127.0.0.1:8082/oauth2/jwks
user-name-attribute: sub
\ No newline at end of file
diff --git a/portal/backend/portal-admin/target/classes/application.yml b/portal/backend/portal/portal-admin/src/main/resources/application.yml
similarity index 95%
rename from portal/backend/portal-admin/target/classes/application.yml
rename to portal/backend/portal/portal-admin/src/main/resources/application.yml
index 2123cfb..c8bcf87 100644
--- a/portal/backend/portal-admin/target/classes/application.yml
+++ b/portal/backend/portal/portal-admin/src/main/resources/application.yml
@@ -34,8 +34,7 @@ server:
# 日志配置
logging:
level:
- org.lingniu.portal: debug
- org.springframework: warn
+ root: debug
# 用户配置
user:
@@ -52,7 +51,7 @@ spring:
# 国际化资源文件路径
basename: i18n/messages
profiles:
- active: local
+ active: test
# 文件上传
servlet:
multipart:
@@ -69,7 +68,7 @@ spring:
# redis 配置
redis:
# 地址
- host: localhost
+ host: 127.0.0.1
# 端口,默认为6379
port: 6379
# 数据库索引
@@ -128,7 +127,7 @@ referer:
# 防盗链开关
enabled: false
# 允许的域名列表
- allowed-domains: localhost,127.0.0.1
+ allowed-domains: localhost,127.0.0.1,106.14.217.120
# 防止XSS攻击
xss:
diff --git a/portal/backend/portal-admin/src/main/resources/banner.txt b/portal/backend/portal/portal-admin/src/main/resources/banner.txt
similarity index 100%
rename from portal/backend/portal-admin/src/main/resources/banner.txt
rename to portal/backend/portal/portal-admin/src/main/resources/banner.txt
diff --git a/portal/backend/portal-admin/src/main/resources/i18n/messages.properties b/portal/backend/portal/portal-admin/src/main/resources/i18n/messages.properties
similarity index 100%
rename from portal/backend/portal-admin/src/main/resources/i18n/messages.properties
rename to portal/backend/portal/portal-admin/src/main/resources/i18n/messages.properties
diff --git a/portal/backend/portal-admin/target/classes/logback.xml b/portal/backend/portal/portal-admin/src/main/resources/logback.xml
similarity index 99%
rename from portal/backend/portal-admin/target/classes/logback.xml
rename to portal/backend/portal/portal-admin/src/main/resources/logback.xml
index 648cfc2..5c2b3bd 100644
--- a/portal/backend/portal-admin/target/classes/logback.xml
+++ b/portal/backend/portal/portal-admin/src/main/resources/logback.xml
@@ -76,7 +76,7 @@
-
+
diff --git a/portal/backend/portal-admin/src/main/resources/mybatis/mybatis-config.xml b/portal/backend/portal/portal-admin/src/main/resources/mybatis/mybatis-config.xml
similarity index 100%
rename from portal/backend/portal-admin/src/main/resources/mybatis/mybatis-config.xml
rename to portal/backend/portal/portal-admin/src/main/resources/mybatis/mybatis-config.xml
diff --git a/portal/backend/portal-admin/target/classes/META-INF/spring-devtools.properties b/portal/backend/portal/portal-admin/target/classes/META-INF/spring-devtools.properties
similarity index 100%
rename from portal/backend/portal-admin/target/classes/META-INF/spring-devtools.properties
rename to portal/backend/portal/portal-admin/target/classes/META-INF/spring-devtools.properties
diff --git a/portal/backend/portal-admin/src/main/resources/application-local.yml b/portal/backend/portal/portal-admin/target/classes/application-local.yml
similarity index 79%
rename from portal/backend/portal-admin/src/main/resources/application-local.yml
rename to portal/backend/portal/portal-admin/target/classes/application-local.yml
index 29f5158..09d8f54 100644
--- a/portal/backend/portal-admin/src/main/resources/application-local.yml
+++ b/portal/backend/portal/portal-admin/target/classes/application-local.yml
@@ -1,9 +1,12 @@
# 数据源配置
spring:
datasource:
- url: jdbc:mysql://localhost:3306/portal?useUnicode=true&characterEncoding=utf-8&useSSL=false
- username: root
- password: Zhang!@#
+# url: jdbc:mysql://localhost:3306/portal?useUnicode=true&characterEncoding=utf-8&useSSL=false
+# username: root
+# password: Zhang!@#
+# url: jdbc:mysql://106.14.217.120:3306/platform?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例
+# username: lingniu
+# password: Lingniu2026!
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
druid:
@@ -12,6 +15,9 @@ spring:
# url: jdbc:mysql://localhost:3306/portal?useUnicode=true&characterEncoding=utf-8&useSSL=false
# username: root
# password: Zhang!@#
+ url: jdbc:mysql://106.14.217.120:3306/platform?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例
+ username: lingniu
+ password: Lingniu2026!
# 初始连接数
initialSize: 5
# 最小连接池数量
@@ -59,7 +65,7 @@ spring:
oauth2:
resourceserver:
jwt:
- jwk-set-uri: http://localhost:8000/oauth2/jwks
+ jwk-set-uri: http://localhost:8082/oauth2/jwks
client:
registration:
portal:
@@ -82,4 +88,4 @@ spring:
token-uri: http://localhost:8000/oauth2/token
user-info-uri: http://localhost:8000/userinfo
jwk-set-uri: http://localhost:8000/oauth2/jwks
- user-name-attribute: sub
\ No newline at end of file
+ user-name-attribute: sub
diff --git a/portal/backend/portal-admin/target/classes/application-test.yml b/portal/backend/portal/portal-admin/target/classes/application-test.yml
similarity index 84%
rename from portal/backend/portal-admin/target/classes/application-test.yml
rename to portal/backend/portal/portal-admin/target/classes/application-test.yml
index c0ac2b3..5856b2f 100644
--- a/portal/backend/portal-admin/target/classes/application-test.yml
+++ b/portal/backend/portal/portal-admin/target/classes/application-test.yml
@@ -1,7 +1,7 @@
# 数据源配置
spring:
datasource:
- url: jdbc:mysql://localhost:3306/platform?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例
+ url: jdbc:mysql://106.14.217.120:3306/platform?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例
username: lingniu
password: Lingniu2026!
type: com.alibaba.druid.pool.DruidDataSource
@@ -59,7 +59,7 @@ spring:
oauth2:
resourceserver:
jwt:
- jwk-set-uri: http://localhost:8000/oauth2/jwks
+ jwk-set-uri: http://127.0.0.1:8082/oauth2/jwks
client:
registration:
portal:
@@ -77,9 +77,9 @@ spring:
provider:
idp:
- # issuer-uri: http://localhost:8000
+ issuer-uri: http://127.0.0.1:8082
authorization-uri: http://106.14.217.120/idp-ui/sso
- token-uri: http://localhost:8082/oauth2/token
- user-info-uri: http://localhost:8082/userinfo
- jwk-set-uri: http://localhost:8082/oauth2/jwks
+ token-uri: http://127.0.0.1:8082/oauth2/token
+ user-info-uri: http://127.0.0.1:8082/userinfo
+ jwk-set-uri: http://127.0.0.1:8082/oauth2/jwks
user-name-attribute: sub
\ No newline at end of file
diff --git a/portal/backend/portal-admin/src/main/resources/application.yml b/portal/backend/portal/portal-admin/target/classes/application.yml
similarity index 96%
rename from portal/backend/portal-admin/src/main/resources/application.yml
rename to portal/backend/portal/portal-admin/target/classes/application.yml
index 2123cfb..ddc290e 100644
--- a/portal/backend/portal-admin/src/main/resources/application.yml
+++ b/portal/backend/portal/portal-admin/target/classes/application.yml
@@ -34,8 +34,7 @@ server:
# 日志配置
logging:
level:
- org.lingniu.portal: debug
- org.springframework: warn
+ root: debug
# 用户配置
user:
@@ -52,7 +51,7 @@ spring:
# 国际化资源文件路径
basename: i18n/messages
profiles:
- active: local
+ active: test
# 文件上传
servlet:
multipart:
@@ -69,7 +68,7 @@ spring:
# redis 配置
redis:
# 地址
- host: localhost
+ host: 127.0.0.1
# 端口,默认为6379
port: 6379
# 数据库索引
diff --git a/portal/backend/portal-admin/target/classes/banner.txt b/portal/backend/portal/portal-admin/target/classes/banner.txt
similarity index 100%
rename from portal/backend/portal-admin/target/classes/banner.txt
rename to portal/backend/portal/portal-admin/target/classes/banner.txt
diff --git a/portal/backend/portal-admin/target/classes/i18n/messages.properties b/portal/backend/portal/portal-admin/target/classes/i18n/messages.properties
similarity index 100%
rename from portal/backend/portal-admin/target/classes/i18n/messages.properties
rename to portal/backend/portal/portal-admin/target/classes/i18n/messages.properties
diff --git a/portal/backend/portal-admin/src/main/resources/logback.xml b/portal/backend/portal/portal-admin/target/classes/logback.xml
similarity index 99%
rename from portal/backend/portal-admin/src/main/resources/logback.xml
rename to portal/backend/portal/portal-admin/target/classes/logback.xml
index 648cfc2..5c2b3bd 100644
--- a/portal/backend/portal-admin/src/main/resources/logback.xml
+++ b/portal/backend/portal/portal-admin/target/classes/logback.xml
@@ -76,7 +76,7 @@
-
+
diff --git a/portal/backend/portal-admin/target/classes/mybatis/mybatis-config.xml b/portal/backend/portal/portal-admin/target/classes/mybatis/mybatis-config.xml
similarity index 100%
rename from portal/backend/portal-admin/target/classes/mybatis/mybatis-config.xml
rename to portal/backend/portal/portal-admin/target/classes/mybatis/mybatis-config.xml
diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/PortalApplication.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/PortalApplication.class
similarity index 100%
rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/PortalApplication.class
rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/PortalApplication.class
diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/PortalServletInitializer.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/PortalServletInitializer.class
similarity index 100%
rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/PortalServletInitializer.class
rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/PortalServletInitializer.class
diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/common/CommonController.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/common/CommonController.class
similarity index 100%
rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/common/CommonController.class
rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/common/CommonController.class
diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/CacheController.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/CacheController.class
similarity index 100%
rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/CacheController.class
rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/CacheController.class
diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/ServerController.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/ServerController.class
similarity index 100%
rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/ServerController.class
rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/ServerController.class
diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/SysLogininforController.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/SysLogininforController.class
similarity index 100%
rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/SysLogininforController.class
rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/SysLogininforController.class
diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/SysOperlogController.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/SysOperlogController.class
similarity index 100%
rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/SysOperlogController.class
rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/SysOperlogController.class
diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/SysUserOnlineController.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/SysUserOnlineController.class
similarity index 100%
rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/SysUserOnlineController.class
rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/monitor/SysUserOnlineController.class
diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysConfigController.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysConfigController.class
similarity index 100%
rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysConfigController.class
rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysConfigController.class
diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysDeptController.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysDeptController.class
similarity index 100%
rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysDeptController.class
rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysDeptController.class
diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysDictDataController.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysDictDataController.class
similarity index 100%
rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysDictDataController.class
rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysDictDataController.class
diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysDictTypeController.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysDictTypeController.class
similarity index 100%
rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysDictTypeController.class
rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysDictTypeController.class
diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysIndexController.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysIndexController.class
similarity index 100%
rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysIndexController.class
rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysIndexController.class
diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysMenuController.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysMenuController.class
similarity index 100%
rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysMenuController.class
rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysMenuController.class
diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysNoticeController.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysNoticeController.class
similarity index 100%
rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysNoticeController.class
rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysNoticeController.class
diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysPostController.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysPostController.class
similarity index 100%
rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysPostController.class
rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysPostController.class
diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysProfileController.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysProfileController.class
similarity index 100%
rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysProfileController.class
rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysProfileController.class
diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysRegisterController.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysRegisterController.class
similarity index 100%
rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysRegisterController.class
rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysRegisterController.class
diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysRoleController.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysRoleController.class
similarity index 100%
rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysRoleController.class
rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysRoleController.class
diff --git a/portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysUserController.class b/portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysUserController.class
similarity index 100%
rename from portal/backend/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysUserController.class
rename to portal/backend/portal/portal-admin/target/classes/org/lingniu/portal/web/controller/system/SysUserController.class
diff --git a/portal/backend/portal-admin/target/maven-archiver/pom.properties b/portal/backend/portal/portal-admin/target/maven-archiver/pom.properties
similarity index 72%
rename from portal/backend/portal-admin/target/maven-archiver/pom.properties
rename to portal/backend/portal/portal-admin/target/maven-archiver/pom.properties
index 92e76b0..e845f45 100644
--- a/portal/backend/portal-admin/target/maven-archiver/pom.properties
+++ b/portal/backend/portal/portal-admin/target/maven-archiver/pom.properties
@@ -1,5 +1,5 @@
#Generated by Maven
-#Tue Feb 10 15:14:17 CST 2026
+#Tue Feb 10 18:48:41 CST 2026
groupId=org.lingniu
artifactId=portal-admin
version=1.0.0
diff --git a/portal/backend/portal-admin/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/portal/backend/portal/portal-admin/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
similarity index 100%
rename from portal/backend/portal-admin/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
rename to portal/backend/portal/portal-admin/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
diff --git a/portal/backend/portal-admin/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/portal/backend/portal/portal-admin/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
similarity index 100%
rename from portal/backend/portal-admin/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
rename to portal/backend/portal/portal-admin/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
diff --git a/portal/backend/portal-admin/target/portal-admin.jar b/portal/backend/portal/portal-admin/target/portal-admin.jar
similarity index 99%
rename from portal/backend/portal-admin/target/portal-admin.jar
rename to portal/backend/portal/portal-admin/target/portal-admin.jar
index cd65807..a3b0b05 100644
Binary files a/portal/backend/portal-admin/target/portal-admin.jar and b/portal/backend/portal/portal-admin/target/portal-admin.jar differ
diff --git a/portal/backend/portal-admin/target/portal-admin.jar.original b/portal/backend/portal/portal-admin/target/portal-admin.jar.original
similarity index 80%
rename from portal/backend/portal-admin/target/portal-admin.jar.original
rename to portal/backend/portal/portal-admin/target/portal-admin.jar.original
index fe23119..02a2598 100644
Binary files a/portal/backend/portal-admin/target/portal-admin.jar.original and b/portal/backend/portal/portal-admin/target/portal-admin.jar.original differ
diff --git a/portal/backend/portal-common/pom.xml b/portal/backend/portal/portal-common/pom.xml
similarity index 100%
rename from portal/backend/portal-common/pom.xml
rename to portal/backend/portal/portal-common/pom.xml
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/annotation/Anonymous.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/annotation/Anonymous.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/annotation/Anonymous.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/annotation/Anonymous.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/annotation/DataScope.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/annotation/DataScope.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/annotation/DataScope.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/annotation/DataScope.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/annotation/DataSource.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/annotation/DataSource.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/annotation/DataSource.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/annotation/DataSource.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/annotation/Excel.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/annotation/Excel.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/annotation/Excel.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/annotation/Excel.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/annotation/Excels.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/annotation/Excels.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/annotation/Excels.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/annotation/Excels.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/annotation/Log.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/annotation/Log.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/annotation/Log.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/annotation/Log.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/annotation/RateLimiter.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/annotation/RateLimiter.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/annotation/RateLimiter.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/annotation/RateLimiter.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/annotation/RepeatSubmit.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/annotation/RepeatSubmit.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/annotation/RepeatSubmit.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/annotation/RepeatSubmit.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/annotation/Sensitive.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/annotation/Sensitive.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/annotation/Sensitive.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/annotation/Sensitive.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/config/ProjectConfig.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/config/ProjectConfig.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/config/ProjectConfig.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/config/ProjectConfig.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/config/serializer/SensitiveJsonSerializer.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/config/serializer/SensitiveJsonSerializer.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/config/serializer/SensitiveJsonSerializer.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/config/serializer/SensitiveJsonSerializer.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/constant/CacheConstants.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/constant/CacheConstants.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/constant/CacheConstants.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/constant/CacheConstants.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/constant/Constants.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/constant/Constants.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/constant/Constants.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/constant/Constants.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/constant/GenConstants.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/constant/GenConstants.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/constant/GenConstants.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/constant/GenConstants.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/constant/HttpStatus.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/constant/HttpStatus.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/constant/HttpStatus.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/constant/HttpStatus.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/constant/ScheduleConstants.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/constant/ScheduleConstants.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/constant/ScheduleConstants.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/constant/ScheduleConstants.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/constant/UserConstants.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/constant/UserConstants.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/constant/UserConstants.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/constant/UserConstants.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/controller/BaseController.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/controller/BaseController.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/controller/BaseController.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/controller/BaseController.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/domain/AjaxResult.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/domain/AjaxResult.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/domain/AjaxResult.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/domain/AjaxResult.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/domain/BaseEntity.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/domain/BaseEntity.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/domain/BaseEntity.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/domain/BaseEntity.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/domain/R.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/domain/R.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/domain/R.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/domain/R.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/domain/TreeEntity.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/domain/TreeEntity.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/domain/TreeEntity.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/domain/TreeEntity.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/domain/TreeSelect.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/domain/TreeSelect.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/domain/TreeSelect.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/domain/TreeSelect.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/domain/entity/SysDept.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/domain/entity/SysDept.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/domain/entity/SysDept.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/domain/entity/SysDept.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/domain/entity/SysDictData.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/domain/entity/SysDictData.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/domain/entity/SysDictData.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/domain/entity/SysDictData.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/domain/entity/SysDictType.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/domain/entity/SysDictType.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/domain/entity/SysDictType.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/domain/entity/SysDictType.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/domain/entity/SysMenu.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/domain/entity/SysMenu.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/domain/entity/SysMenu.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/domain/entity/SysMenu.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/domain/entity/SysRole.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/domain/entity/SysRole.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/domain/entity/SysRole.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/domain/entity/SysRole.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/domain/entity/SysUser.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/domain/entity/SysUser.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/domain/entity/SysUser.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/domain/entity/SysUser.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/domain/model/LoginBody.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/domain/model/LoginBody.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/domain/model/LoginBody.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/domain/model/LoginBody.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/domain/model/LoginUser.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/domain/model/LoginUser.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/domain/model/LoginUser.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/domain/model/LoginUser.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/domain/model/RegisterBody.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/domain/model/RegisterBody.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/domain/model/RegisterBody.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/domain/model/RegisterBody.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/page/PageDomain.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/page/PageDomain.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/page/PageDomain.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/page/PageDomain.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/page/TableDataInfo.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/page/TableDataInfo.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/page/TableDataInfo.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/page/TableDataInfo.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/page/TableSupport.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/page/TableSupport.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/page/TableSupport.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/page/TableSupport.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/redis/RedisCache.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/redis/RedisCache.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/redis/RedisCache.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/redis/RedisCache.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/text/CharsetKit.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/text/CharsetKit.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/text/CharsetKit.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/text/CharsetKit.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/text/Convert.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/text/Convert.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/text/Convert.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/text/Convert.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/text/StrFormatter.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/text/StrFormatter.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/core/text/StrFormatter.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/core/text/StrFormatter.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/enums/BusinessStatus.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/enums/BusinessStatus.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/enums/BusinessStatus.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/enums/BusinessStatus.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/enums/BusinessType.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/enums/BusinessType.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/enums/BusinessType.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/enums/BusinessType.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/enums/DataSourceType.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/enums/DataSourceType.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/enums/DataSourceType.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/enums/DataSourceType.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/enums/DesensitizedType.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/enums/DesensitizedType.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/enums/DesensitizedType.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/enums/DesensitizedType.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/enums/HttpMethod.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/enums/HttpMethod.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/enums/HttpMethod.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/enums/HttpMethod.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/enums/LimitType.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/enums/LimitType.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/enums/LimitType.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/enums/LimitType.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/enums/OperatorType.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/enums/OperatorType.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/enums/OperatorType.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/enums/OperatorType.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/enums/UserStatus.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/enums/UserStatus.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/enums/UserStatus.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/enums/UserStatus.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/exception/DemoModeException.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/exception/DemoModeException.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/exception/DemoModeException.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/exception/DemoModeException.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/exception/GlobalException.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/exception/GlobalException.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/exception/GlobalException.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/exception/GlobalException.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/exception/ServiceException.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/exception/ServiceException.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/exception/ServiceException.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/exception/ServiceException.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/exception/UtilException.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/exception/UtilException.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/exception/UtilException.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/exception/UtilException.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/exception/base/BaseException.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/exception/base/BaseException.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/exception/base/BaseException.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/exception/base/BaseException.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/exception/file/FileException.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/exception/file/FileException.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/exception/file/FileException.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/exception/file/FileException.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/exception/file/FileNameLengthLimitExceededException.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/exception/file/FileNameLengthLimitExceededException.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/exception/file/FileNameLengthLimitExceededException.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/exception/file/FileNameLengthLimitExceededException.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/exception/file/FileSizeLimitExceededException.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/exception/file/FileSizeLimitExceededException.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/exception/file/FileSizeLimitExceededException.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/exception/file/FileSizeLimitExceededException.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/exception/file/FileUploadException.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/exception/file/FileUploadException.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/exception/file/FileUploadException.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/exception/file/FileUploadException.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/exception/file/InvalidExtensionException.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/exception/file/InvalidExtensionException.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/exception/file/InvalidExtensionException.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/exception/file/InvalidExtensionException.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/exception/job/TaskException.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/exception/job/TaskException.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/exception/job/TaskException.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/exception/job/TaskException.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/exception/user/BlackListException.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/exception/user/BlackListException.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/exception/user/BlackListException.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/exception/user/BlackListException.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/exception/user/CaptchaException.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/exception/user/CaptchaException.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/exception/user/CaptchaException.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/exception/user/CaptchaException.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/exception/user/CaptchaExpireException.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/exception/user/CaptchaExpireException.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/exception/user/CaptchaExpireException.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/exception/user/CaptchaExpireException.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/exception/user/UserException.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/exception/user/UserException.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/exception/user/UserException.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/exception/user/UserException.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/exception/user/UserNotExistsException.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/exception/user/UserNotExistsException.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/exception/user/UserNotExistsException.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/exception/user/UserNotExistsException.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/exception/user/UserPasswordNotMatchException.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/exception/user/UserPasswordNotMatchException.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/exception/user/UserPasswordNotMatchException.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/exception/user/UserPasswordNotMatchException.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/exception/user/UserPasswordRetryLimitExceedException.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/exception/user/UserPasswordRetryLimitExceedException.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/exception/user/UserPasswordRetryLimitExceedException.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/exception/user/UserPasswordRetryLimitExceedException.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/filter/PropertyPreExcludeFilter.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/filter/PropertyPreExcludeFilter.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/filter/PropertyPreExcludeFilter.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/filter/PropertyPreExcludeFilter.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/filter/RefererFilter.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/filter/RefererFilter.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/filter/RefererFilter.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/filter/RefererFilter.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/filter/RepeatableFilter.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/filter/RepeatableFilter.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/filter/RepeatableFilter.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/filter/RepeatableFilter.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/filter/RepeatedlyRequestWrapper.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/filter/RepeatedlyRequestWrapper.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/filter/RepeatedlyRequestWrapper.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/filter/RepeatedlyRequestWrapper.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/filter/XssFilter.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/filter/XssFilter.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/filter/XssFilter.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/filter/XssFilter.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/filter/XssHttpServletRequestWrapper.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/filter/XssHttpServletRequestWrapper.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/filter/XssHttpServletRequestWrapper.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/filter/XssHttpServletRequestWrapper.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/Arith.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/Arith.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/Arith.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/Arith.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/DateUtils.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/DateUtils.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/DateUtils.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/DateUtils.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/DesensitizedUtil.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/DesensitizedUtil.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/DesensitizedUtil.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/DesensitizedUtil.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/DictUtils.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/DictUtils.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/DictUtils.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/DictUtils.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/ExceptionUtil.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/ExceptionUtil.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/ExceptionUtil.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/ExceptionUtil.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/LogUtils.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/LogUtils.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/LogUtils.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/LogUtils.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/MessageUtils.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/MessageUtils.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/MessageUtils.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/MessageUtils.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/PageUtils.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/PageUtils.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/PageUtils.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/PageUtils.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/SecurityUtils.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/SecurityUtils.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/SecurityUtils.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/SecurityUtils.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/ServletUtils.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/ServletUtils.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/ServletUtils.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/ServletUtils.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/StringUtils.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/StringUtils.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/StringUtils.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/StringUtils.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/Threads.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/Threads.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/Threads.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/Threads.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/bean/BeanUtils.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/bean/BeanUtils.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/bean/BeanUtils.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/bean/BeanUtils.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/bean/BeanValidators.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/bean/BeanValidators.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/bean/BeanValidators.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/bean/BeanValidators.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/file/FileTypeUtils.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/file/FileTypeUtils.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/file/FileTypeUtils.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/file/FileTypeUtils.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/file/FileUploadUtils.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/file/FileUploadUtils.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/file/FileUploadUtils.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/file/FileUploadUtils.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/file/FileUtils.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/file/FileUtils.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/file/FileUtils.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/file/FileUtils.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/file/ImageUtils.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/file/ImageUtils.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/file/ImageUtils.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/file/ImageUtils.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/file/MimeTypeUtils.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/file/MimeTypeUtils.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/file/MimeTypeUtils.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/file/MimeTypeUtils.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/html/EscapeUtil.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/html/EscapeUtil.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/html/EscapeUtil.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/html/EscapeUtil.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/html/HTMLFilter.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/html/HTMLFilter.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/html/HTMLFilter.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/html/HTMLFilter.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/http/HttpHelper.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/http/HttpHelper.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/http/HttpHelper.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/http/HttpHelper.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/http/HttpUtils.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/http/HttpUtils.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/http/HttpUtils.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/http/HttpUtils.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/http/UserAgentUtils.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/http/UserAgentUtils.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/http/UserAgentUtils.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/http/UserAgentUtils.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/ip/AddressUtils.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/ip/AddressUtils.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/ip/AddressUtils.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/ip/AddressUtils.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/ip/IpUtils.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/ip/IpUtils.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/ip/IpUtils.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/ip/IpUtils.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/poi/ExcelHandlerAdapter.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/poi/ExcelHandlerAdapter.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/poi/ExcelHandlerAdapter.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/poi/ExcelHandlerAdapter.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/poi/ExcelUtil.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/poi/ExcelUtil.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/poi/ExcelUtil.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/poi/ExcelUtil.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/reflect/ReflectUtils.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/reflect/ReflectUtils.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/reflect/ReflectUtils.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/reflect/ReflectUtils.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/sign/Base64.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/sign/Base64.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/sign/Base64.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/sign/Base64.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/sign/Md5Utils.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/sign/Md5Utils.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/sign/Md5Utils.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/sign/Md5Utils.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/spring/SpringUtils.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/spring/SpringUtils.java
similarity index 92%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/spring/SpringUtils.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/spring/SpringUtils.java
index 7e2251b..deadbda 100644
--- a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/spring/SpringUtils.java
+++ b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/spring/SpringUtils.java
@@ -41,7 +41,7 @@ public final class SpringUtils implements BeanFactoryPostProcessor, ApplicationC
*
* @param name
* @return Object 一个以所给名字注册的bean的实例
- * @throws org.springframework.beans.BeansException
+ * @throws BeansException
*
*/
@SuppressWarnings("unchecked")
@@ -55,7 +55,7 @@ public final class SpringUtils implements BeanFactoryPostProcessor, ApplicationC
*
* @param clz
* @return
- * @throws org.springframework.beans.BeansException
+ * @throws BeansException
*
*/
public static T getBean(Class clz) throws BeansException
@@ -80,7 +80,7 @@ public final class SpringUtils implements BeanFactoryPostProcessor, ApplicationC
*
* @param name
* @return boolean
- * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException
+ * @throws NoSuchBeanDefinitionException
*
*/
public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException
@@ -91,7 +91,7 @@ public final class SpringUtils implements BeanFactoryPostProcessor, ApplicationC
/**
* @param name
* @return Class 注册对象的类型
- * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException
+ * @throws NoSuchBeanDefinitionException
*
*/
public static Class> getType(String name) throws NoSuchBeanDefinitionException
@@ -104,7 +104,7 @@ public final class SpringUtils implements BeanFactoryPostProcessor, ApplicationC
*
* @param name
* @return
- * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException
+ * @throws NoSuchBeanDefinitionException
*
*/
public static String[] getAliases(String name) throws NoSuchBeanDefinitionException
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/sql/SqlUtil.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/sql/SqlUtil.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/sql/SqlUtil.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/sql/SqlUtil.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/uuid/IdUtils.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/uuid/IdUtils.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/uuid/IdUtils.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/uuid/IdUtils.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/uuid/Seq.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/uuid/Seq.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/uuid/Seq.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/uuid/Seq.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/uuid/UUID.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/uuid/UUID.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/utils/uuid/UUID.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/utils/uuid/UUID.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/xss/Xss.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/xss/Xss.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/xss/Xss.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/xss/Xss.java
diff --git a/portal/backend/portal-common/src/main/java/org/lingniu/portal/common/xss/XssValidator.java b/portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/xss/XssValidator.java
similarity index 100%
rename from portal/backend/portal-common/src/main/java/org/lingniu/portal/common/xss/XssValidator.java
rename to portal/backend/portal/portal-common/src/main/java/org/lingniu/portal/common/xss/XssValidator.java
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/annotation/Anonymous.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/annotation/Anonymous.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/annotation/Anonymous.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/annotation/Anonymous.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/annotation/DataScope.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/annotation/DataScope.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/annotation/DataScope.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/annotation/DataScope.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/annotation/DataSource.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/annotation/DataSource.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/annotation/DataSource.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/annotation/DataSource.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/annotation/Excel$ColumnType.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/annotation/Excel$ColumnType.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/annotation/Excel$ColumnType.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/annotation/Excel$ColumnType.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/annotation/Excel$Type.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/annotation/Excel$Type.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/annotation/Excel$Type.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/annotation/Excel$Type.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/annotation/Excel.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/annotation/Excel.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/annotation/Excel.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/annotation/Excel.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/annotation/Excels.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/annotation/Excels.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/annotation/Excels.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/annotation/Excels.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/annotation/Log.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/annotation/Log.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/annotation/Log.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/annotation/Log.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/annotation/RateLimiter.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/annotation/RateLimiter.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/annotation/RateLimiter.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/annotation/RateLimiter.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/annotation/RepeatSubmit.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/annotation/RepeatSubmit.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/annotation/RepeatSubmit.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/annotation/RepeatSubmit.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/annotation/Sensitive.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/annotation/Sensitive.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/annotation/Sensitive.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/annotation/Sensitive.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/config/ProjectConfig.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/config/ProjectConfig.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/config/ProjectConfig.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/config/ProjectConfig.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/config/serializer/SensitiveJsonSerializer.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/config/serializer/SensitiveJsonSerializer.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/config/serializer/SensitiveJsonSerializer.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/config/serializer/SensitiveJsonSerializer.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/constant/CacheConstants.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/constant/CacheConstants.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/constant/CacheConstants.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/constant/CacheConstants.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/constant/Constants.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/constant/Constants.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/constant/Constants.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/constant/Constants.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/constant/GenConstants.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/constant/GenConstants.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/constant/GenConstants.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/constant/GenConstants.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/constant/HttpStatus.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/constant/HttpStatus.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/constant/HttpStatus.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/constant/HttpStatus.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/constant/ScheduleConstants$Status.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/constant/ScheduleConstants$Status.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/constant/ScheduleConstants$Status.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/constant/ScheduleConstants$Status.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/constant/ScheduleConstants.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/constant/ScheduleConstants.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/constant/ScheduleConstants.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/constant/ScheduleConstants.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/constant/UserConstants.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/constant/UserConstants.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/constant/UserConstants.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/constant/UserConstants.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/controller/BaseController$1.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/controller/BaseController$1.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/controller/BaseController$1.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/controller/BaseController$1.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/controller/BaseController.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/controller/BaseController.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/controller/BaseController.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/controller/BaseController.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/domain/AjaxResult.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/domain/AjaxResult.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/domain/AjaxResult.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/domain/AjaxResult.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/domain/BaseEntity.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/domain/BaseEntity.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/domain/BaseEntity.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/domain/BaseEntity.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/domain/R.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/domain/R.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/domain/R.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/domain/R.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/domain/TreeEntity.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/domain/TreeEntity.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/domain/TreeEntity.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/domain/TreeEntity.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/domain/TreeSelect.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/domain/TreeSelect.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/domain/TreeSelect.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/domain/TreeSelect.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/domain/entity/SysDept.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/domain/entity/SysDept.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/domain/entity/SysDept.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/domain/entity/SysDept.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/domain/entity/SysDictData.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/domain/entity/SysDictData.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/domain/entity/SysDictData.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/domain/entity/SysDictData.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/domain/entity/SysDictType.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/domain/entity/SysDictType.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/domain/entity/SysDictType.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/domain/entity/SysDictType.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/domain/entity/SysMenu.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/domain/entity/SysMenu.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/domain/entity/SysMenu.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/domain/entity/SysMenu.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/domain/entity/SysRole.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/domain/entity/SysRole.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/domain/entity/SysRole.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/domain/entity/SysRole.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/domain/entity/SysUser.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/domain/entity/SysUser.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/domain/entity/SysUser.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/domain/entity/SysUser.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/domain/model/LoginBody.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/domain/model/LoginBody.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/domain/model/LoginBody.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/domain/model/LoginBody.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/domain/model/LoginUser.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/domain/model/LoginUser.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/domain/model/LoginUser.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/domain/model/LoginUser.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/domain/model/RegisterBody.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/domain/model/RegisterBody.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/domain/model/RegisterBody.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/domain/model/RegisterBody.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/page/PageDomain.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/page/PageDomain.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/page/PageDomain.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/page/PageDomain.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/page/TableDataInfo.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/page/TableDataInfo.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/page/TableDataInfo.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/page/TableDataInfo.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/page/TableSupport.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/page/TableSupport.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/page/TableSupport.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/page/TableSupport.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/redis/RedisCache.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/redis/RedisCache.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/redis/RedisCache.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/redis/RedisCache.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/text/CharsetKit.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/text/CharsetKit.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/text/CharsetKit.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/text/CharsetKit.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/text/Convert.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/text/Convert.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/text/Convert.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/text/Convert.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/text/StrFormatter.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/text/StrFormatter.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/core/text/StrFormatter.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/core/text/StrFormatter.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/enums/BusinessStatus.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/enums/BusinessStatus.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/enums/BusinessStatus.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/enums/BusinessStatus.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/enums/BusinessType.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/enums/BusinessType.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/enums/BusinessType.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/enums/BusinessType.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/enums/DataSourceType.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/enums/DataSourceType.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/enums/DataSourceType.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/enums/DataSourceType.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/enums/DesensitizedType.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/enums/DesensitizedType.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/enums/DesensitizedType.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/enums/DesensitizedType.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/enums/HttpMethod.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/enums/HttpMethod.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/enums/HttpMethod.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/enums/HttpMethod.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/enums/LimitType.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/enums/LimitType.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/enums/LimitType.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/enums/LimitType.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/enums/OperatorType.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/enums/OperatorType.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/enums/OperatorType.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/enums/OperatorType.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/enums/UserStatus.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/enums/UserStatus.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/enums/UserStatus.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/enums/UserStatus.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/DemoModeException.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/DemoModeException.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/DemoModeException.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/DemoModeException.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/GlobalException.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/GlobalException.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/GlobalException.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/GlobalException.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/ServiceException.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/ServiceException.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/ServiceException.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/ServiceException.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/UtilException.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/UtilException.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/UtilException.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/UtilException.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/base/BaseException.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/base/BaseException.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/base/BaseException.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/base/BaseException.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/file/FileException.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/file/FileException.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/file/FileException.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/file/FileException.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/file/FileNameLengthLimitExceededException.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/file/FileNameLengthLimitExceededException.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/file/FileNameLengthLimitExceededException.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/file/FileNameLengthLimitExceededException.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/file/FileSizeLimitExceededException.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/file/FileSizeLimitExceededException.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/file/FileSizeLimitExceededException.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/file/FileSizeLimitExceededException.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/file/FileUploadException.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/file/FileUploadException.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/file/FileUploadException.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/file/FileUploadException.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/file/InvalidExtensionException$InvalidFlashExtensionException.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/file/InvalidExtensionException$InvalidFlashExtensionException.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/file/InvalidExtensionException$InvalidFlashExtensionException.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/file/InvalidExtensionException$InvalidFlashExtensionException.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/file/InvalidExtensionException$InvalidImageExtensionException.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/file/InvalidExtensionException$InvalidImageExtensionException.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/file/InvalidExtensionException$InvalidImageExtensionException.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/file/InvalidExtensionException$InvalidImageExtensionException.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/file/InvalidExtensionException$InvalidMediaExtensionException.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/file/InvalidExtensionException$InvalidMediaExtensionException.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/file/InvalidExtensionException$InvalidMediaExtensionException.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/file/InvalidExtensionException$InvalidMediaExtensionException.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/file/InvalidExtensionException$InvalidVideoExtensionException.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/file/InvalidExtensionException$InvalidVideoExtensionException.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/file/InvalidExtensionException$InvalidVideoExtensionException.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/file/InvalidExtensionException$InvalidVideoExtensionException.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/file/InvalidExtensionException.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/file/InvalidExtensionException.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/file/InvalidExtensionException.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/file/InvalidExtensionException.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/job/TaskException$Code.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/job/TaskException$Code.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/job/TaskException$Code.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/job/TaskException$Code.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/job/TaskException.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/job/TaskException.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/job/TaskException.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/job/TaskException.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/user/BlackListException.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/user/BlackListException.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/user/BlackListException.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/user/BlackListException.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/user/CaptchaException.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/user/CaptchaException.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/user/CaptchaException.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/user/CaptchaException.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/user/CaptchaExpireException.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/user/CaptchaExpireException.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/user/CaptchaExpireException.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/user/CaptchaExpireException.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/user/UserException.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/user/UserException.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/user/UserException.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/user/UserException.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/user/UserNotExistsException.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/user/UserNotExistsException.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/user/UserNotExistsException.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/user/UserNotExistsException.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/user/UserPasswordNotMatchException.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/user/UserPasswordNotMatchException.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/user/UserPasswordNotMatchException.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/user/UserPasswordNotMatchException.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/user/UserPasswordRetryLimitExceedException.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/user/UserPasswordRetryLimitExceedException.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/exception/user/UserPasswordRetryLimitExceedException.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/exception/user/UserPasswordRetryLimitExceedException.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/filter/PropertyPreExcludeFilter.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/filter/PropertyPreExcludeFilter.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/filter/PropertyPreExcludeFilter.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/filter/PropertyPreExcludeFilter.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/filter/RefererFilter.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/filter/RefererFilter.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/filter/RefererFilter.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/filter/RefererFilter.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/filter/RepeatableFilter.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/filter/RepeatableFilter.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/filter/RepeatableFilter.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/filter/RepeatableFilter.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/filter/RepeatedlyRequestWrapper$1.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/filter/RepeatedlyRequestWrapper$1.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/filter/RepeatedlyRequestWrapper$1.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/filter/RepeatedlyRequestWrapper$1.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/filter/RepeatedlyRequestWrapper.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/filter/RepeatedlyRequestWrapper.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/filter/RepeatedlyRequestWrapper.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/filter/RepeatedlyRequestWrapper.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/filter/XssFilter.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/filter/XssFilter.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/filter/XssFilter.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/filter/XssFilter.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/filter/XssHttpServletRequestWrapper$1.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/filter/XssHttpServletRequestWrapper$1.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/filter/XssHttpServletRequestWrapper$1.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/filter/XssHttpServletRequestWrapper$1.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/filter/XssHttpServletRequestWrapper.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/filter/XssHttpServletRequestWrapper.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/filter/XssHttpServletRequestWrapper.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/filter/XssHttpServletRequestWrapper.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/Arith.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/Arith.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/Arith.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/Arith.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/DateUtils.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/DateUtils.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/DateUtils.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/DateUtils.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/DesensitizedUtil.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/DesensitizedUtil.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/DesensitizedUtil.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/DesensitizedUtil.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/DictUtils.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/DictUtils.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/DictUtils.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/DictUtils.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/ExceptionUtil.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/ExceptionUtil.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/ExceptionUtil.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/ExceptionUtil.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/LogUtils.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/LogUtils.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/LogUtils.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/LogUtils.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/MessageUtils.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/MessageUtils.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/MessageUtils.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/MessageUtils.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/PageUtils.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/PageUtils.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/PageUtils.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/PageUtils.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/SecurityUtils.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/SecurityUtils.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/SecurityUtils.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/SecurityUtils.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/ServletUtils.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/ServletUtils.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/ServletUtils.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/ServletUtils.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/StringUtils.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/StringUtils.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/StringUtils.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/StringUtils.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/Threads.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/Threads.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/Threads.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/Threads.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/bean/BeanUtils.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/bean/BeanUtils.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/bean/BeanUtils.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/bean/BeanUtils.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/bean/BeanValidators.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/bean/BeanValidators.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/bean/BeanValidators.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/bean/BeanValidators.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/file/FileTypeUtils.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/file/FileTypeUtils.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/file/FileTypeUtils.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/file/FileTypeUtils.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/file/FileUploadUtils.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/file/FileUploadUtils.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/file/FileUploadUtils.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/file/FileUploadUtils.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/file/FileUtils.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/file/FileUtils.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/file/FileUtils.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/file/FileUtils.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/file/ImageUtils.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/file/ImageUtils.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/file/ImageUtils.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/file/ImageUtils.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/file/MimeTypeUtils.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/file/MimeTypeUtils.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/file/MimeTypeUtils.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/file/MimeTypeUtils.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/html/EscapeUtil.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/html/EscapeUtil.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/html/EscapeUtil.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/html/EscapeUtil.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/html/HTMLFilter.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/html/HTMLFilter.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/html/HTMLFilter.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/html/HTMLFilter.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/http/HttpHelper.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/http/HttpHelper.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/http/HttpHelper.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/http/HttpHelper.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/http/HttpUtils$TrustAnyHostnameVerifier.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/http/HttpUtils$TrustAnyHostnameVerifier.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/http/HttpUtils$TrustAnyHostnameVerifier.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/http/HttpUtils$TrustAnyHostnameVerifier.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/http/HttpUtils$TrustAnyTrustManager.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/http/HttpUtils$TrustAnyTrustManager.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/http/HttpUtils$TrustAnyTrustManager.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/http/HttpUtils$TrustAnyTrustManager.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/http/HttpUtils.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/http/HttpUtils.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/http/HttpUtils.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/http/HttpUtils.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/http/UserAgentUtils.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/http/UserAgentUtils.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/http/UserAgentUtils.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/http/UserAgentUtils.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/ip/AddressUtils.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/ip/AddressUtils.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/ip/AddressUtils.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/ip/AddressUtils.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/ip/IpUtils.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/ip/IpUtils.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/ip/IpUtils.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/ip/IpUtils.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/poi/ExcelHandlerAdapter.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/poi/ExcelHandlerAdapter.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/poi/ExcelHandlerAdapter.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/poi/ExcelHandlerAdapter.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/poi/ExcelUtil.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/poi/ExcelUtil.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/poi/ExcelUtil.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/poi/ExcelUtil.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/reflect/ReflectUtils.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/reflect/ReflectUtils.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/reflect/ReflectUtils.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/reflect/ReflectUtils.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/sign/Base64.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/sign/Base64.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/sign/Base64.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/sign/Base64.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/sign/Md5Utils.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/sign/Md5Utils.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/sign/Md5Utils.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/sign/Md5Utils.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/spring/SpringUtils.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/spring/SpringUtils.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/spring/SpringUtils.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/spring/SpringUtils.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/sql/SqlUtil.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/sql/SqlUtil.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/sql/SqlUtil.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/sql/SqlUtil.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/uuid/IdUtils.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/uuid/IdUtils.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/uuid/IdUtils.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/uuid/IdUtils.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/uuid/Seq.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/uuid/Seq.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/uuid/Seq.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/uuid/Seq.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/uuid/UUID$Holder.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/uuid/UUID$Holder.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/uuid/UUID$Holder.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/uuid/UUID$Holder.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/uuid/UUID.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/uuid/UUID.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/utils/uuid/UUID.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/utils/uuid/UUID.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/xss/Xss.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/xss/Xss.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/xss/Xss.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/xss/Xss.class
diff --git a/portal/backend/portal-common/target/classes/org/lingniu/portal/common/xss/XssValidator.class b/portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/xss/XssValidator.class
similarity index 100%
rename from portal/backend/portal-common/target/classes/org/lingniu/portal/common/xss/XssValidator.class
rename to portal/backend/portal/portal-common/target/classes/org/lingniu/portal/common/xss/XssValidator.class
diff --git a/portal/backend/portal-common/target/maven-archiver/pom.properties b/portal/backend/portal/portal-common/target/maven-archiver/pom.properties
similarity index 72%
rename from portal/backend/portal-common/target/maven-archiver/pom.properties
rename to portal/backend/portal/portal-common/target/maven-archiver/pom.properties
index 5273a28..e69ab9a 100644
--- a/portal/backend/portal-common/target/maven-archiver/pom.properties
+++ b/portal/backend/portal/portal-common/target/maven-archiver/pom.properties
@@ -1,5 +1,5 @@
#Generated by Maven
-#Tue Feb 10 15:13:40 CST 2026
+#Tue Feb 10 17:56:35 CST 2026
groupId=org.lingniu
artifactId=portal-common
version=1.0.0
diff --git a/portal/backend/portal-common/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/portal/backend/portal/portal-common/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
similarity index 100%
rename from portal/backend/portal-common/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
rename to portal/backend/portal/portal-common/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
diff --git a/portal/backend/portal-common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/portal/backend/portal/portal-common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
similarity index 100%
rename from portal/backend/portal-common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
rename to portal/backend/portal/portal-common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
diff --git a/portal/backend/portal-common/target/portal-common-1.0.0.jar b/portal/backend/portal/portal-common/target/portal-common-1.0.0.jar
similarity index 90%
rename from portal/backend/portal-common/target/portal-common-1.0.0.jar
rename to portal/backend/portal/portal-common/target/portal-common-1.0.0.jar
index 2a5906f..67d6506 100644
Binary files a/portal/backend/portal-common/target/portal-common-1.0.0.jar and b/portal/backend/portal/portal-common/target/portal-common-1.0.0.jar differ
diff --git a/portal/backend/portal-framework/pom.xml b/portal/backend/portal/portal-framework/pom.xml
similarity index 100%
rename from portal/backend/portal-framework/pom.xml
rename to portal/backend/portal/portal-framework/pom.xml
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/aspectj/DataScopeAspect.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/aspectj/DataScopeAspect.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/aspectj/DataScopeAspect.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/aspectj/DataScopeAspect.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/aspectj/DataSourceAspect.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/aspectj/DataSourceAspect.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/aspectj/DataSourceAspect.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/aspectj/DataSourceAspect.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/aspectj/LogAspect.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/aspectj/LogAspect.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/aspectj/LogAspect.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/aspectj/LogAspect.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/aspectj/RateLimiterAspect.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/aspectj/RateLimiterAspect.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/aspectj/RateLimiterAspect.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/aspectj/RateLimiterAspect.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/config/ApplicationConfig.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/config/ApplicationConfig.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/config/ApplicationConfig.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/config/ApplicationConfig.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/config/CaptchaConfig.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/config/CaptchaConfig.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/config/CaptchaConfig.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/config/CaptchaConfig.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/config/DruidConfig.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/config/DruidConfig.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/config/DruidConfig.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/config/DruidConfig.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/config/FastJson2JsonRedisSerializer.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/config/FastJson2JsonRedisSerializer.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/config/FastJson2JsonRedisSerializer.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/config/FastJson2JsonRedisSerializer.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/config/FilterConfig.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/config/FilterConfig.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/config/FilterConfig.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/config/FilterConfig.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/config/I18nConfig.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/config/I18nConfig.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/config/I18nConfig.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/config/I18nConfig.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/config/KaptchaTextCreator.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/config/KaptchaTextCreator.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/config/KaptchaTextCreator.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/config/KaptchaTextCreator.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/config/MyBatisConfig.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/config/MyBatisConfig.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/config/MyBatisConfig.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/config/MyBatisConfig.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/config/RedisConfig.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/config/RedisConfig.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/config/RedisConfig.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/config/RedisConfig.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/config/ResourcesConfig.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/config/ResourcesConfig.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/config/ResourcesConfig.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/config/ResourcesConfig.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/config/SecurityConfig.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/config/SecurityConfig.java
similarity index 98%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/config/SecurityConfig.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/config/SecurityConfig.java
index de3619d..45b06dd 100644
--- a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/config/SecurityConfig.java
+++ b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/config/SecurityConfig.java
@@ -1,4 +1,4 @@
-//package org.lingniu.portal.framework.config;
+package org.lingniu.portal.framework.config;//package org.lingniu.portal.framework.config;
//
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.context.annotation.Bean;
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/config/ServerConfig.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/config/ServerConfig.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/config/ServerConfig.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/config/ServerConfig.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/config/ThreadPoolConfig.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/config/ThreadPoolConfig.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/config/ThreadPoolConfig.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/config/ThreadPoolConfig.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/config/properties/DruidProperties.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/config/properties/DruidProperties.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/config/properties/DruidProperties.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/config/properties/DruidProperties.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/config/properties/PermitAllUrlProperties.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/config/properties/PermitAllUrlProperties.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/config/properties/PermitAllUrlProperties.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/config/properties/PermitAllUrlProperties.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/datasource/DynamicDataSource.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/datasource/DynamicDataSource.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/datasource/DynamicDataSource.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/datasource/DynamicDataSource.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/datasource/DynamicDataSourceContextHolder.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/datasource/DynamicDataSourceContextHolder.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/datasource/DynamicDataSourceContextHolder.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/datasource/DynamicDataSourceContextHolder.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/interceptor/RepeatSubmitInterceptor.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/interceptor/RepeatSubmitInterceptor.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/interceptor/RepeatSubmitInterceptor.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/interceptor/RepeatSubmitInterceptor.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/interceptor/impl/SameUrlDataInterceptor.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/interceptor/impl/SameUrlDataInterceptor.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/interceptor/impl/SameUrlDataInterceptor.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/interceptor/impl/SameUrlDataInterceptor.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/manager/AsyncManager.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/manager/AsyncManager.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/manager/AsyncManager.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/manager/AsyncManager.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/manager/ShutdownManager.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/manager/ShutdownManager.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/manager/ShutdownManager.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/manager/ShutdownManager.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/manager/factory/AsyncFactory.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/manager/factory/AsyncFactory.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/manager/factory/AsyncFactory.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/manager/factory/AsyncFactory.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/security/context/AuthenticationContextHolder.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/security/context/AuthenticationContextHolder.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/security/context/AuthenticationContextHolder.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/security/context/AuthenticationContextHolder.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/security/context/PermissionContextHolder.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/security/context/PermissionContextHolder.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/security/context/PermissionContextHolder.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/security/context/PermissionContextHolder.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/web/domain/Server.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/web/domain/Server.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/web/domain/Server.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/web/domain/Server.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/web/domain/server/Cpu.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/web/domain/server/Cpu.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/web/domain/server/Cpu.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/web/domain/server/Cpu.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/web/domain/server/Jvm.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/web/domain/server/Jvm.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/web/domain/server/Jvm.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/web/domain/server/Jvm.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/web/domain/server/Mem.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/web/domain/server/Mem.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/web/domain/server/Mem.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/web/domain/server/Mem.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/web/domain/server/Sys.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/web/domain/server/Sys.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/web/domain/server/Sys.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/web/domain/server/Sys.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/web/domain/server/SysFile.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/web/domain/server/SysFile.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/web/domain/server/SysFile.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/web/domain/server/SysFile.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/web/exception/GlobalExceptionHandler.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/web/exception/GlobalExceptionHandler.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/web/exception/GlobalExceptionHandler.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/web/exception/GlobalExceptionHandler.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/web/service/SysPasswordService.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/web/service/SysPasswordService.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/web/service/SysPasswordService.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/web/service/SysPasswordService.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/web/service/SysPermissionService.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/web/service/SysPermissionService.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/web/service/SysPermissionService.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/web/service/SysPermissionService.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/web/service/SysRegisterService.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/web/service/SysRegisterService.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/web/service/SysRegisterService.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/web/service/SysRegisterService.java
diff --git a/portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/web/service/UserDetailsServiceImpl.java b/portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/web/service/UserDetailsServiceImpl.java
similarity index 100%
rename from portal/backend/portal-framework/src/main/java/org/lingniu/portal/framework/web/service/UserDetailsServiceImpl.java
rename to portal/backend/portal/portal-framework/src/main/java/org/lingniu/portal/framework/web/service/UserDetailsServiceImpl.java
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/aspectj/DataScopeAspect.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/aspectj/DataScopeAspect.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/aspectj/DataScopeAspect.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/aspectj/DataScopeAspect.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/aspectj/DataSourceAspect.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/aspectj/DataSourceAspect.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/aspectj/DataSourceAspect.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/aspectj/DataSourceAspect.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/aspectj/LogAspect.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/aspectj/LogAspect.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/aspectj/LogAspect.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/aspectj/LogAspect.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/aspectj/RateLimiterAspect.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/aspectj/RateLimiterAspect.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/aspectj/RateLimiterAspect.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/aspectj/RateLimiterAspect.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/config/ApplicationConfig.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/config/ApplicationConfig.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/config/ApplicationConfig.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/config/ApplicationConfig.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/config/CaptchaConfig.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/config/CaptchaConfig.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/config/CaptchaConfig.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/config/CaptchaConfig.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/config/DruidConfig$1.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/config/DruidConfig$1.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/config/DruidConfig$1.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/config/DruidConfig$1.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/config/DruidConfig.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/config/DruidConfig.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/config/DruidConfig.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/config/DruidConfig.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/config/FastJson2JsonRedisSerializer.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/config/FastJson2JsonRedisSerializer.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/config/FastJson2JsonRedisSerializer.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/config/FastJson2JsonRedisSerializer.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/config/FilterConfig.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/config/FilterConfig.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/config/FilterConfig.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/config/FilterConfig.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/config/I18nConfig.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/config/I18nConfig.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/config/I18nConfig.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/config/I18nConfig.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/config/KaptchaTextCreator.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/config/KaptchaTextCreator.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/config/KaptchaTextCreator.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/config/KaptchaTextCreator.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/config/MyBatisConfig.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/config/MyBatisConfig.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/config/MyBatisConfig.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/config/MyBatisConfig.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/config/RedisConfig.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/config/RedisConfig.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/config/RedisConfig.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/config/RedisConfig.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/config/ResourcesConfig.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/config/ResourcesConfig.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/config/ResourcesConfig.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/config/ResourcesConfig.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/config/ServerConfig.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/config/ServerConfig.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/config/ServerConfig.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/config/ServerConfig.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/config/ThreadPoolConfig$1.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/config/ThreadPoolConfig$1.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/config/ThreadPoolConfig$1.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/config/ThreadPoolConfig$1.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/config/ThreadPoolConfig.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/config/ThreadPoolConfig.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/config/ThreadPoolConfig.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/config/ThreadPoolConfig.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/config/properties/DruidProperties.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/config/properties/DruidProperties.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/config/properties/DruidProperties.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/config/properties/DruidProperties.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/config/properties/PermitAllUrlProperties.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/config/properties/PermitAllUrlProperties.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/config/properties/PermitAllUrlProperties.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/config/properties/PermitAllUrlProperties.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/datasource/DynamicDataSource.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/datasource/DynamicDataSource.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/datasource/DynamicDataSource.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/datasource/DynamicDataSource.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/datasource/DynamicDataSourceContextHolder.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/datasource/DynamicDataSourceContextHolder.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/datasource/DynamicDataSourceContextHolder.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/datasource/DynamicDataSourceContextHolder.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/interceptor/RepeatSubmitInterceptor.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/interceptor/RepeatSubmitInterceptor.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/interceptor/RepeatSubmitInterceptor.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/interceptor/RepeatSubmitInterceptor.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/interceptor/impl/SameUrlDataInterceptor.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/interceptor/impl/SameUrlDataInterceptor.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/interceptor/impl/SameUrlDataInterceptor.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/interceptor/impl/SameUrlDataInterceptor.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/manager/AsyncManager.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/manager/AsyncManager.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/manager/AsyncManager.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/manager/AsyncManager.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/manager/ShutdownManager.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/manager/ShutdownManager.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/manager/ShutdownManager.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/manager/ShutdownManager.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/manager/factory/AsyncFactory$1.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/manager/factory/AsyncFactory$1.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/manager/factory/AsyncFactory$1.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/manager/factory/AsyncFactory$1.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/manager/factory/AsyncFactory$2.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/manager/factory/AsyncFactory$2.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/manager/factory/AsyncFactory$2.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/manager/factory/AsyncFactory$2.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/manager/factory/AsyncFactory.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/manager/factory/AsyncFactory.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/manager/factory/AsyncFactory.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/manager/factory/AsyncFactory.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/security/context/AuthenticationContextHolder.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/security/context/AuthenticationContextHolder.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/security/context/AuthenticationContextHolder.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/security/context/AuthenticationContextHolder.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/security/context/PermissionContextHolder.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/security/context/PermissionContextHolder.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/security/context/PermissionContextHolder.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/security/context/PermissionContextHolder.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/web/domain/Server.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/web/domain/Server.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/web/domain/Server.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/web/domain/Server.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/web/domain/server/Cpu.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/web/domain/server/Cpu.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/web/domain/server/Cpu.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/web/domain/server/Cpu.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/web/domain/server/Jvm.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/web/domain/server/Jvm.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/web/domain/server/Jvm.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/web/domain/server/Jvm.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/web/domain/server/Mem.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/web/domain/server/Mem.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/web/domain/server/Mem.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/web/domain/server/Mem.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/web/domain/server/Sys.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/web/domain/server/Sys.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/web/domain/server/Sys.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/web/domain/server/Sys.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/web/domain/server/SysFile.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/web/domain/server/SysFile.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/web/domain/server/SysFile.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/web/domain/server/SysFile.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/web/exception/GlobalExceptionHandler.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/web/exception/GlobalExceptionHandler.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/web/exception/GlobalExceptionHandler.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/web/exception/GlobalExceptionHandler.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/web/service/SysPasswordService.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/web/service/SysPasswordService.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/web/service/SysPasswordService.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/web/service/SysPasswordService.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/web/service/SysPermissionService.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/web/service/SysPermissionService.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/web/service/SysPermissionService.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/web/service/SysPermissionService.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/web/service/SysRegisterService.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/web/service/SysRegisterService.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/web/service/SysRegisterService.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/web/service/SysRegisterService.class
diff --git a/portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/web/service/UserDetailsServiceImpl.class b/portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/web/service/UserDetailsServiceImpl.class
similarity index 100%
rename from portal/backend/portal-framework/target/classes/org/lingniu/portal/framework/web/service/UserDetailsServiceImpl.class
rename to portal/backend/portal/portal-framework/target/classes/org/lingniu/portal/framework/web/service/UserDetailsServiceImpl.class
diff --git a/portal/backend/portal-framework/target/maven-archiver/pom.properties b/portal/backend/portal/portal-framework/target/maven-archiver/pom.properties
similarity index 73%
rename from portal/backend/portal-framework/target/maven-archiver/pom.properties
rename to portal/backend/portal/portal-framework/target/maven-archiver/pom.properties
index 92e773e..e3ba7fc 100644
--- a/portal/backend/portal-framework/target/maven-archiver/pom.properties
+++ b/portal/backend/portal/portal-framework/target/maven-archiver/pom.properties
@@ -1,5 +1,5 @@
#Generated by Maven
-#Tue Feb 10 15:13:56 CST 2026
+#Tue Feb 10 17:56:55 CST 2026
groupId=org.lingniu
artifactId=portal-framework
version=1.0.0
diff --git a/portal/backend/portal-framework/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/portal/backend/portal/portal-framework/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
similarity index 100%
rename from portal/backend/portal-framework/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
rename to portal/backend/portal/portal-framework/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
diff --git a/portal/backend/portal-framework/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/portal/backend/portal/portal-framework/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
similarity index 100%
rename from portal/backend/portal-framework/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
rename to portal/backend/portal/portal-framework/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
diff --git a/portal/backend/portal-framework/target/portal-framework-1.0.0.jar b/portal/backend/portal/portal-framework/target/portal-framework-1.0.0.jar
similarity index 89%
rename from portal/backend/portal-framework/target/portal-framework-1.0.0.jar
rename to portal/backend/portal/portal-framework/target/portal-framework-1.0.0.jar
index b80c4cc..f97f076 100644
Binary files a/portal/backend/portal-framework/target/portal-framework-1.0.0.jar and b/portal/backend/portal/portal-framework/target/portal-framework-1.0.0.jar differ
diff --git a/portal/backend/portal-system/pom.xml b/portal/backend/portal/portal-system/pom.xml
similarity index 100%
rename from portal/backend/portal-system/pom.xml
rename to portal/backend/portal/portal-system/pom.xml
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/domain/SysCache.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/domain/SysCache.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/domain/SysCache.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/domain/SysCache.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/domain/SysConfig.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/domain/SysConfig.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/domain/SysConfig.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/domain/SysConfig.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/domain/SysLogininfor.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/domain/SysLogininfor.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/domain/SysLogininfor.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/domain/SysLogininfor.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/domain/SysNotice.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/domain/SysNotice.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/domain/SysNotice.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/domain/SysNotice.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/domain/SysOperLog.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/domain/SysOperLog.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/domain/SysOperLog.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/domain/SysOperLog.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/domain/SysPost.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/domain/SysPost.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/domain/SysPost.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/domain/SysPost.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/domain/SysRoleDept.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/domain/SysRoleDept.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/domain/SysRoleDept.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/domain/SysRoleDept.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/domain/SysRoleMenu.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/domain/SysRoleMenu.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/domain/SysRoleMenu.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/domain/SysRoleMenu.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/domain/SysUserOnline.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/domain/SysUserOnline.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/domain/SysUserOnline.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/domain/SysUserOnline.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/domain/SysUserPost.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/domain/SysUserPost.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/domain/SysUserPost.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/domain/SysUserPost.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/domain/SysUserRole.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/domain/SysUserRole.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/domain/SysUserRole.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/domain/SysUserRole.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/domain/vo/MetaVo.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/domain/vo/MetaVo.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/domain/vo/MetaVo.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/domain/vo/MetaVo.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/domain/vo/RouterVo.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/domain/vo/RouterVo.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/domain/vo/RouterVo.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/domain/vo/RouterVo.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysConfigMapper.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysConfigMapper.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysConfigMapper.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysConfigMapper.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysDeptMapper.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysDeptMapper.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysDeptMapper.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysDeptMapper.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysDictDataMapper.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysDictDataMapper.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysDictDataMapper.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysDictDataMapper.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysDictTypeMapper.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysDictTypeMapper.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysDictTypeMapper.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysDictTypeMapper.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysLogininforMapper.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysLogininforMapper.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysLogininforMapper.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysLogininforMapper.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysMenuMapper.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysMenuMapper.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysMenuMapper.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysMenuMapper.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysNoticeMapper.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysNoticeMapper.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysNoticeMapper.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysNoticeMapper.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysOperLogMapper.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysOperLogMapper.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysOperLogMapper.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysOperLogMapper.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysPostMapper.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysPostMapper.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysPostMapper.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysPostMapper.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysRoleDeptMapper.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysRoleDeptMapper.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysRoleDeptMapper.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysRoleDeptMapper.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysRoleMapper.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysRoleMapper.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysRoleMapper.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysRoleMapper.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysRoleMenuMapper.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysRoleMenuMapper.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysRoleMenuMapper.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysRoleMenuMapper.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysUserMapper.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysUserMapper.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysUserMapper.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysUserMapper.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysUserPostMapper.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysUserPostMapper.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysUserPostMapper.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysUserPostMapper.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysUserRoleMapper.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysUserRoleMapper.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysUserRoleMapper.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/mapper/SysUserRoleMapper.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/ISysConfigService.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/ISysConfigService.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/ISysConfigService.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/ISysConfigService.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/ISysDeptService.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/ISysDeptService.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/ISysDeptService.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/ISysDeptService.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/ISysDictDataService.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/ISysDictDataService.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/ISysDictDataService.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/ISysDictDataService.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/ISysDictTypeService.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/ISysDictTypeService.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/ISysDictTypeService.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/ISysDictTypeService.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/ISysLogininforService.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/ISysLogininforService.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/ISysLogininforService.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/ISysLogininforService.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/ISysMenuService.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/ISysMenuService.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/ISysMenuService.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/ISysMenuService.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/ISysNoticeService.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/ISysNoticeService.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/ISysNoticeService.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/ISysNoticeService.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/ISysOperLogService.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/ISysOperLogService.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/ISysOperLogService.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/ISysOperLogService.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/ISysPostService.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/ISysPostService.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/ISysPostService.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/ISysPostService.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/ISysRoleService.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/ISysRoleService.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/ISysRoleService.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/ISysRoleService.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/ISysUserOnlineService.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/ISysUserOnlineService.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/ISysUserOnlineService.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/ISysUserOnlineService.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/ISysUserService.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/ISysUserService.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/ISysUserService.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/ISysUserService.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysConfigServiceImpl.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysConfigServiceImpl.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysConfigServiceImpl.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysConfigServiceImpl.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysDeptServiceImpl.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysDeptServiceImpl.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysDeptServiceImpl.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysDeptServiceImpl.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysDictDataServiceImpl.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysDictDataServiceImpl.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysDictDataServiceImpl.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysDictDataServiceImpl.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysDictTypeServiceImpl.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysDictTypeServiceImpl.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysDictTypeServiceImpl.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysDictTypeServiceImpl.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysLogininforServiceImpl.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysLogininforServiceImpl.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysLogininforServiceImpl.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysLogininforServiceImpl.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysMenuServiceImpl.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysMenuServiceImpl.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysMenuServiceImpl.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysMenuServiceImpl.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysNoticeServiceImpl.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysNoticeServiceImpl.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysNoticeServiceImpl.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysNoticeServiceImpl.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysOperLogServiceImpl.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysOperLogServiceImpl.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysOperLogServiceImpl.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysOperLogServiceImpl.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysPostServiceImpl.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysPostServiceImpl.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysPostServiceImpl.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysPostServiceImpl.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysRoleServiceImpl.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysRoleServiceImpl.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysRoleServiceImpl.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysRoleServiceImpl.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysUserOnlineServiceImpl.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysUserOnlineServiceImpl.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysUserOnlineServiceImpl.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysUserOnlineServiceImpl.java
diff --git a/portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysUserServiceImpl.java b/portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysUserServiceImpl.java
similarity index 100%
rename from portal/backend/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysUserServiceImpl.java
rename to portal/backend/portal/portal-system/src/main/java/org/lingniu/portal/system/service/impl/SysUserServiceImpl.java
diff --git a/portal/backend/portal-system/src/main/resources/mapper/system/SysConfigMapper.xml b/portal/backend/portal/portal-system/src/main/resources/mapper/system/SysConfigMapper.xml
similarity index 100%
rename from portal/backend/portal-system/src/main/resources/mapper/system/SysConfigMapper.xml
rename to portal/backend/portal/portal-system/src/main/resources/mapper/system/SysConfigMapper.xml
diff --git a/portal/backend/portal-system/src/main/resources/mapper/system/SysDeptMapper.xml b/portal/backend/portal/portal-system/src/main/resources/mapper/system/SysDeptMapper.xml
similarity index 100%
rename from portal/backend/portal-system/src/main/resources/mapper/system/SysDeptMapper.xml
rename to portal/backend/portal/portal-system/src/main/resources/mapper/system/SysDeptMapper.xml
diff --git a/portal/backend/portal-system/src/main/resources/mapper/system/SysDictDataMapper.xml b/portal/backend/portal/portal-system/src/main/resources/mapper/system/SysDictDataMapper.xml
similarity index 100%
rename from portal/backend/portal-system/src/main/resources/mapper/system/SysDictDataMapper.xml
rename to portal/backend/portal/portal-system/src/main/resources/mapper/system/SysDictDataMapper.xml
diff --git a/portal/backend/portal-system/src/main/resources/mapper/system/SysDictTypeMapper.xml b/portal/backend/portal/portal-system/src/main/resources/mapper/system/SysDictTypeMapper.xml
similarity index 100%
rename from portal/backend/portal-system/src/main/resources/mapper/system/SysDictTypeMapper.xml
rename to portal/backend/portal/portal-system/src/main/resources/mapper/system/SysDictTypeMapper.xml
diff --git a/portal/backend/portal-system/src/main/resources/mapper/system/SysLogininforMapper.xml b/portal/backend/portal/portal-system/src/main/resources/mapper/system/SysLogininforMapper.xml
similarity index 100%
rename from portal/backend/portal-system/src/main/resources/mapper/system/SysLogininforMapper.xml
rename to portal/backend/portal/portal-system/src/main/resources/mapper/system/SysLogininforMapper.xml
diff --git a/portal/backend/portal-system/src/main/resources/mapper/system/SysMenuMapper.xml b/portal/backend/portal/portal-system/src/main/resources/mapper/system/SysMenuMapper.xml
similarity index 100%
rename from portal/backend/portal-system/src/main/resources/mapper/system/SysMenuMapper.xml
rename to portal/backend/portal/portal-system/src/main/resources/mapper/system/SysMenuMapper.xml
diff --git a/portal/backend/portal-system/src/main/resources/mapper/system/SysNoticeMapper.xml b/portal/backend/portal/portal-system/src/main/resources/mapper/system/SysNoticeMapper.xml
similarity index 100%
rename from portal/backend/portal-system/src/main/resources/mapper/system/SysNoticeMapper.xml
rename to portal/backend/portal/portal-system/src/main/resources/mapper/system/SysNoticeMapper.xml
diff --git a/portal/backend/portal-system/src/main/resources/mapper/system/SysOperLogMapper.xml b/portal/backend/portal/portal-system/src/main/resources/mapper/system/SysOperLogMapper.xml
similarity index 100%
rename from portal/backend/portal-system/src/main/resources/mapper/system/SysOperLogMapper.xml
rename to portal/backend/portal/portal-system/src/main/resources/mapper/system/SysOperLogMapper.xml
diff --git a/portal/backend/portal-system/src/main/resources/mapper/system/SysPostMapper.xml b/portal/backend/portal/portal-system/src/main/resources/mapper/system/SysPostMapper.xml
similarity index 100%
rename from portal/backend/portal-system/src/main/resources/mapper/system/SysPostMapper.xml
rename to portal/backend/portal/portal-system/src/main/resources/mapper/system/SysPostMapper.xml
diff --git a/portal/backend/portal-system/src/main/resources/mapper/system/SysRoleDeptMapper.xml b/portal/backend/portal/portal-system/src/main/resources/mapper/system/SysRoleDeptMapper.xml
similarity index 100%
rename from portal/backend/portal-system/src/main/resources/mapper/system/SysRoleDeptMapper.xml
rename to portal/backend/portal/portal-system/src/main/resources/mapper/system/SysRoleDeptMapper.xml
diff --git a/portal/backend/portal-system/src/main/resources/mapper/system/SysRoleMapper.xml b/portal/backend/portal/portal-system/src/main/resources/mapper/system/SysRoleMapper.xml
similarity index 100%
rename from portal/backend/portal-system/src/main/resources/mapper/system/SysRoleMapper.xml
rename to portal/backend/portal/portal-system/src/main/resources/mapper/system/SysRoleMapper.xml
diff --git a/portal/backend/portal-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml b/portal/backend/portal/portal-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml
similarity index 100%
rename from portal/backend/portal-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml
rename to portal/backend/portal/portal-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml
diff --git a/portal/backend/portal-system/src/main/resources/mapper/system/SysUserMapper.xml b/portal/backend/portal/portal-system/src/main/resources/mapper/system/SysUserMapper.xml
similarity index 100%
rename from portal/backend/portal-system/src/main/resources/mapper/system/SysUserMapper.xml
rename to portal/backend/portal/portal-system/src/main/resources/mapper/system/SysUserMapper.xml
diff --git a/portal/backend/portal-system/src/main/resources/mapper/system/SysUserPostMapper.xml b/portal/backend/portal/portal-system/src/main/resources/mapper/system/SysUserPostMapper.xml
similarity index 100%
rename from portal/backend/portal-system/src/main/resources/mapper/system/SysUserPostMapper.xml
rename to portal/backend/portal/portal-system/src/main/resources/mapper/system/SysUserPostMapper.xml
diff --git a/portal/backend/portal-system/src/main/resources/mapper/system/SysUserRoleMapper.xml b/portal/backend/portal/portal-system/src/main/resources/mapper/system/SysUserRoleMapper.xml
similarity index 100%
rename from portal/backend/portal-system/src/main/resources/mapper/system/SysUserRoleMapper.xml
rename to portal/backend/portal/portal-system/src/main/resources/mapper/system/SysUserRoleMapper.xml
diff --git a/portal/backend/portal-system/target/classes/mapper/system/SysConfigMapper.xml b/portal/backend/portal/portal-system/target/classes/mapper/system/SysConfigMapper.xml
similarity index 100%
rename from portal/backend/portal-system/target/classes/mapper/system/SysConfigMapper.xml
rename to portal/backend/portal/portal-system/target/classes/mapper/system/SysConfigMapper.xml
diff --git a/portal/backend/portal-system/target/classes/mapper/system/SysDeptMapper.xml b/portal/backend/portal/portal-system/target/classes/mapper/system/SysDeptMapper.xml
similarity index 100%
rename from portal/backend/portal-system/target/classes/mapper/system/SysDeptMapper.xml
rename to portal/backend/portal/portal-system/target/classes/mapper/system/SysDeptMapper.xml
diff --git a/portal/backend/portal-system/target/classes/mapper/system/SysDictDataMapper.xml b/portal/backend/portal/portal-system/target/classes/mapper/system/SysDictDataMapper.xml
similarity index 100%
rename from portal/backend/portal-system/target/classes/mapper/system/SysDictDataMapper.xml
rename to portal/backend/portal/portal-system/target/classes/mapper/system/SysDictDataMapper.xml
diff --git a/portal/backend/portal-system/target/classes/mapper/system/SysDictTypeMapper.xml b/portal/backend/portal/portal-system/target/classes/mapper/system/SysDictTypeMapper.xml
similarity index 100%
rename from portal/backend/portal-system/target/classes/mapper/system/SysDictTypeMapper.xml
rename to portal/backend/portal/portal-system/target/classes/mapper/system/SysDictTypeMapper.xml
diff --git a/portal/backend/portal-system/target/classes/mapper/system/SysLogininforMapper.xml b/portal/backend/portal/portal-system/target/classes/mapper/system/SysLogininforMapper.xml
similarity index 100%
rename from portal/backend/portal-system/target/classes/mapper/system/SysLogininforMapper.xml
rename to portal/backend/portal/portal-system/target/classes/mapper/system/SysLogininforMapper.xml
diff --git a/portal/backend/portal-system/target/classes/mapper/system/SysMenuMapper.xml b/portal/backend/portal/portal-system/target/classes/mapper/system/SysMenuMapper.xml
similarity index 100%
rename from portal/backend/portal-system/target/classes/mapper/system/SysMenuMapper.xml
rename to portal/backend/portal/portal-system/target/classes/mapper/system/SysMenuMapper.xml
diff --git a/portal/backend/portal-system/target/classes/mapper/system/SysNoticeMapper.xml b/portal/backend/portal/portal-system/target/classes/mapper/system/SysNoticeMapper.xml
similarity index 100%
rename from portal/backend/portal-system/target/classes/mapper/system/SysNoticeMapper.xml
rename to portal/backend/portal/portal-system/target/classes/mapper/system/SysNoticeMapper.xml
diff --git a/portal/backend/portal-system/target/classes/mapper/system/SysOperLogMapper.xml b/portal/backend/portal/portal-system/target/classes/mapper/system/SysOperLogMapper.xml
similarity index 100%
rename from portal/backend/portal-system/target/classes/mapper/system/SysOperLogMapper.xml
rename to portal/backend/portal/portal-system/target/classes/mapper/system/SysOperLogMapper.xml
diff --git a/portal/backend/portal-system/target/classes/mapper/system/SysPostMapper.xml b/portal/backend/portal/portal-system/target/classes/mapper/system/SysPostMapper.xml
similarity index 100%
rename from portal/backend/portal-system/target/classes/mapper/system/SysPostMapper.xml
rename to portal/backend/portal/portal-system/target/classes/mapper/system/SysPostMapper.xml
diff --git a/portal/backend/portal-system/target/classes/mapper/system/SysRoleDeptMapper.xml b/portal/backend/portal/portal-system/target/classes/mapper/system/SysRoleDeptMapper.xml
similarity index 100%
rename from portal/backend/portal-system/target/classes/mapper/system/SysRoleDeptMapper.xml
rename to portal/backend/portal/portal-system/target/classes/mapper/system/SysRoleDeptMapper.xml
diff --git a/portal/backend/portal-system/target/classes/mapper/system/SysRoleMapper.xml b/portal/backend/portal/portal-system/target/classes/mapper/system/SysRoleMapper.xml
similarity index 100%
rename from portal/backend/portal-system/target/classes/mapper/system/SysRoleMapper.xml
rename to portal/backend/portal/portal-system/target/classes/mapper/system/SysRoleMapper.xml
diff --git a/portal/backend/portal-system/target/classes/mapper/system/SysRoleMenuMapper.xml b/portal/backend/portal/portal-system/target/classes/mapper/system/SysRoleMenuMapper.xml
similarity index 100%
rename from portal/backend/portal-system/target/classes/mapper/system/SysRoleMenuMapper.xml
rename to portal/backend/portal/portal-system/target/classes/mapper/system/SysRoleMenuMapper.xml
diff --git a/portal/backend/portal-system/target/classes/mapper/system/SysUserMapper.xml b/portal/backend/portal/portal-system/target/classes/mapper/system/SysUserMapper.xml
similarity index 100%
rename from portal/backend/portal-system/target/classes/mapper/system/SysUserMapper.xml
rename to portal/backend/portal/portal-system/target/classes/mapper/system/SysUserMapper.xml
diff --git a/portal/backend/portal-system/target/classes/mapper/system/SysUserPostMapper.xml b/portal/backend/portal/portal-system/target/classes/mapper/system/SysUserPostMapper.xml
similarity index 100%
rename from portal/backend/portal-system/target/classes/mapper/system/SysUserPostMapper.xml
rename to portal/backend/portal/portal-system/target/classes/mapper/system/SysUserPostMapper.xml
diff --git a/portal/backend/portal-system/target/classes/mapper/system/SysUserRoleMapper.xml b/portal/backend/portal/portal-system/target/classes/mapper/system/SysUserRoleMapper.xml
similarity index 100%
rename from portal/backend/portal-system/target/classes/mapper/system/SysUserRoleMapper.xml
rename to portal/backend/portal/portal-system/target/classes/mapper/system/SysUserRoleMapper.xml
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/domain/SysCache.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/domain/SysCache.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/domain/SysCache.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/domain/SysCache.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/domain/SysConfig.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/domain/SysConfig.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/domain/SysConfig.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/domain/SysConfig.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/domain/SysLogininfor.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/domain/SysLogininfor.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/domain/SysLogininfor.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/domain/SysLogininfor.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/domain/SysNotice.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/domain/SysNotice.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/domain/SysNotice.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/domain/SysNotice.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/domain/SysOperLog.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/domain/SysOperLog.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/domain/SysOperLog.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/domain/SysOperLog.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/domain/SysPost.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/domain/SysPost.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/domain/SysPost.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/domain/SysPost.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/domain/SysRoleDept.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/domain/SysRoleDept.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/domain/SysRoleDept.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/domain/SysRoleDept.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/domain/SysRoleMenu.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/domain/SysRoleMenu.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/domain/SysRoleMenu.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/domain/SysRoleMenu.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/domain/SysUserOnline.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/domain/SysUserOnline.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/domain/SysUserOnline.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/domain/SysUserOnline.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/domain/SysUserPost.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/domain/SysUserPost.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/domain/SysUserPost.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/domain/SysUserPost.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/domain/SysUserRole.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/domain/SysUserRole.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/domain/SysUserRole.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/domain/SysUserRole.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/domain/vo/MetaVo.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/domain/vo/MetaVo.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/domain/vo/MetaVo.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/domain/vo/MetaVo.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/domain/vo/RouterVo.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/domain/vo/RouterVo.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/domain/vo/RouterVo.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/domain/vo/RouterVo.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/mapper/SysConfigMapper.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/mapper/SysConfigMapper.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/mapper/SysConfigMapper.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/mapper/SysConfigMapper.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/mapper/SysDeptMapper.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/mapper/SysDeptMapper.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/mapper/SysDeptMapper.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/mapper/SysDeptMapper.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/mapper/SysDictDataMapper.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/mapper/SysDictDataMapper.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/mapper/SysDictDataMapper.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/mapper/SysDictDataMapper.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/mapper/SysDictTypeMapper.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/mapper/SysDictTypeMapper.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/mapper/SysDictTypeMapper.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/mapper/SysDictTypeMapper.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/mapper/SysLogininforMapper.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/mapper/SysLogininforMapper.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/mapper/SysLogininforMapper.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/mapper/SysLogininforMapper.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/mapper/SysMenuMapper.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/mapper/SysMenuMapper.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/mapper/SysMenuMapper.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/mapper/SysMenuMapper.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/mapper/SysNoticeMapper.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/mapper/SysNoticeMapper.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/mapper/SysNoticeMapper.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/mapper/SysNoticeMapper.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/mapper/SysOperLogMapper.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/mapper/SysOperLogMapper.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/mapper/SysOperLogMapper.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/mapper/SysOperLogMapper.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/mapper/SysPostMapper.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/mapper/SysPostMapper.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/mapper/SysPostMapper.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/mapper/SysPostMapper.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/mapper/SysRoleDeptMapper.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/mapper/SysRoleDeptMapper.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/mapper/SysRoleDeptMapper.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/mapper/SysRoleDeptMapper.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/mapper/SysRoleMapper.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/mapper/SysRoleMapper.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/mapper/SysRoleMapper.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/mapper/SysRoleMapper.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/mapper/SysRoleMenuMapper.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/mapper/SysRoleMenuMapper.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/mapper/SysRoleMenuMapper.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/mapper/SysRoleMenuMapper.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/mapper/SysUserMapper.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/mapper/SysUserMapper.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/mapper/SysUserMapper.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/mapper/SysUserMapper.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/mapper/SysUserPostMapper.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/mapper/SysUserPostMapper.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/mapper/SysUserPostMapper.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/mapper/SysUserPostMapper.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/mapper/SysUserRoleMapper.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/mapper/SysUserRoleMapper.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/mapper/SysUserRoleMapper.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/mapper/SysUserRoleMapper.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/ISysConfigService.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/ISysConfigService.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/ISysConfigService.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/ISysConfigService.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/ISysDeptService.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/ISysDeptService.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/ISysDeptService.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/ISysDeptService.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/ISysDictDataService.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/ISysDictDataService.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/ISysDictDataService.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/ISysDictDataService.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/ISysDictTypeService.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/ISysDictTypeService.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/ISysDictTypeService.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/ISysDictTypeService.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/ISysLogininforService.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/ISysLogininforService.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/ISysLogininforService.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/ISysLogininforService.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/ISysMenuService.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/ISysMenuService.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/ISysMenuService.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/ISysMenuService.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/ISysNoticeService.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/ISysNoticeService.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/ISysNoticeService.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/ISysNoticeService.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/ISysOperLogService.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/ISysOperLogService.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/ISysOperLogService.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/ISysOperLogService.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/ISysPostService.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/ISysPostService.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/ISysPostService.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/ISysPostService.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/ISysRoleService.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/ISysRoleService.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/ISysRoleService.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/ISysRoleService.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/ISysUserOnlineService.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/ISysUserOnlineService.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/ISysUserOnlineService.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/ISysUserOnlineService.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/ISysUserService.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/ISysUserService.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/ISysUserService.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/ISysUserService.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysConfigServiceImpl.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysConfigServiceImpl.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysConfigServiceImpl.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysConfigServiceImpl.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysDeptServiceImpl.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysDeptServiceImpl.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysDeptServiceImpl.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysDeptServiceImpl.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysDictDataServiceImpl.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysDictDataServiceImpl.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysDictDataServiceImpl.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysDictDataServiceImpl.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysDictTypeServiceImpl.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysDictTypeServiceImpl.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysDictTypeServiceImpl.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysDictTypeServiceImpl.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysLogininforServiceImpl.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysLogininforServiceImpl.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysLogininforServiceImpl.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysLogininforServiceImpl.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysMenuServiceImpl.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysMenuServiceImpl.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysMenuServiceImpl.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysMenuServiceImpl.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysNoticeServiceImpl.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysNoticeServiceImpl.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysNoticeServiceImpl.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysNoticeServiceImpl.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysOperLogServiceImpl.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysOperLogServiceImpl.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysOperLogServiceImpl.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysOperLogServiceImpl.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysPostServiceImpl.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysPostServiceImpl.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysPostServiceImpl.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysPostServiceImpl.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysRoleServiceImpl.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysRoleServiceImpl.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysRoleServiceImpl.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysRoleServiceImpl.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysUserOnlineServiceImpl.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysUserOnlineServiceImpl.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysUserOnlineServiceImpl.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysUserOnlineServiceImpl.class
diff --git a/portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysUserServiceImpl.class b/portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysUserServiceImpl.class
similarity index 100%
rename from portal/backend/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysUserServiceImpl.class
rename to portal/backend/portal/portal-system/target/classes/org/lingniu/portal/system/service/impl/SysUserServiceImpl.class
diff --git a/portal/backend/portal-system/target/maven-archiver/pom.properties b/portal/backend/portal/portal-system/target/maven-archiver/pom.properties
similarity index 72%
rename from portal/backend/portal-system/target/maven-archiver/pom.properties
rename to portal/backend/portal/portal-system/target/maven-archiver/pom.properties
index 7b7994a..6604526 100644
--- a/portal/backend/portal-system/target/maven-archiver/pom.properties
+++ b/portal/backend/portal/portal-system/target/maven-archiver/pom.properties
@@ -1,5 +1,5 @@
#Generated by Maven
-#Tue Feb 10 15:14:05 CST 2026
+#Tue Feb 10 17:56:45 CST 2026
groupId=org.lingniu
artifactId=portal-system
version=1.0.0
diff --git a/portal/backend/portal-system/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/portal/backend/portal/portal-system/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
similarity index 100%
rename from portal/backend/portal-system/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
rename to portal/backend/portal/portal-system/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
diff --git a/portal/backend/portal-system/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/portal/backend/portal/portal-system/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
similarity index 100%
rename from portal/backend/portal-system/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
rename to portal/backend/portal/portal-system/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
diff --git a/portal/backend/portal-system/target/portal-system-1.0.0.jar b/portal/backend/portal/portal-system/target/portal-system-1.0.0.jar
similarity index 88%
rename from portal/backend/portal-system/target/portal-system-1.0.0.jar
rename to portal/backend/portal/portal-system/target/portal-system-1.0.0.jar
index 2489c90..b7ea6ba 100644
Binary files a/portal/backend/portal-system/target/portal-system-1.0.0.jar and b/portal/backend/portal/portal-system/target/portal-system-1.0.0.jar differ
diff --git a/portal/frontend/portal/.env.development b/portal/frontend/portal/.env.development
index fc423a1..879df1b 100644
--- a/portal/frontend/portal/.env.development
+++ b/portal/frontend/portal/.env.development
@@ -1,15 +1,18 @@
# 页面标题
VITE_APP_TITLE = 羚牛OneOs运营管理
-# 开发环境配置
-VITE_APP_ENV = 'development'
+# 生产环境配置
+VITE_APP_ENV = 'production'
+BASE_URL='/portal-ui'
+# 羚牛OneOs运营管理/生产环境
+VITE_APP_BASE_API = '/portal-api'
-# 羚牛OneOs运营管理/开发环境
-VITE_APP_BASE_API = '/dev-api2'
+# 是否在打包时开启压缩,支持 gzip 和 brotli
+VITE_BUILD_COMPRESS = gzip
VITE_APP_CLIENT_ID=2c6f1d9ff78641c78d72a848
VITE_APP_REGISTRATION_ID=portal
VITE_APP_STORAGE_TYPE=localStorage
-VITE_APP_IDP_LOGOUT_URL=http://localhost/logout
-VITE_APP_HOME_PAGE=http://localhost:81/index
+VITE_APP_IDP_LOGOUT_URL=http://106.14.217.120/idp-ui/logout
+VITE_APP_HOME_PAGE=http://106.14.217.120/portal-ui/index
diff --git a/portal/frontend/portal/README.md b/portal/frontend/portal/README.md
index 8023687..e69de29 100644
--- a/portal/frontend/portal/README.md
+++ b/portal/frontend/portal/README.md
@@ -1,25 +0,0 @@
-## 开发
-
-```bash
-# 进入项目目录
-cd portal
-
-# 安装依赖
-npm install
-
-# 可以使用pnpm
-npm install --registry=https://registry.npmmirror.com
-
-# 启动服务
-npm run dev
-```
-
-浏览器访问 http://localhost:80
-
-## 发布
-
-```bash
-
-# 构建生产环境
-npm run build:prod
-```
\ No newline at end of file
diff --git a/portal/frontend/portal/src/permission.ts b/portal/frontend/portal/src/permission.ts
index bfa791b..857538f 100644
--- a/portal/frontend/portal/src/permission.ts
+++ b/portal/frontend/portal/src/permission.ts
@@ -19,7 +19,7 @@ const isWhiteList = (path: string): boolean => {
return whiteList.some((pattern: string) => isPathMatch(pattern, path))
}
-router.beforeEach((to, from, next) => {
+router.beforeEach(async (to, from, next) => {
if (getToken()) {
to.meta.title && useSettingsStore().setTitle(to.meta.title as string)
/* has token*/
@@ -43,10 +43,7 @@ router.beforeEach((to, from, next) => {
next({ ...to, replace: true }) // hack方法 确保addRoutes已完成
})
}).catch((err: any) => {
- useUserStore().logOut().then(() => {
- ElMessage.error(err as string)
- next({ path: '/' })
- })
+ useUserStore().logOut()
})
} else {
next()
@@ -58,10 +55,18 @@ router.beforeEach((to, from, next) => {
// 在免登录白名单,直接进入
next()
} else {
- if (to.path === '/callback') {
- unifiedLoginSDK.handleCallback().then()
+ if (unifiedLoginSDK.isCallback()) {
+ // 处理OAuth2回调
+ try {
+ console.log('🔄 处理OAuth2回调...');
+ await unifiedLoginSDK.handleCallback();
+ // 回调处理完成后SDK会自动跳转到homePage
+ } catch (error) {
+ console.error('❌ 回调处理失败:', error);
+ next('/');
+ }
}else{
- unifiedLoginSDK.login().then()
+ unifiedLoginSDK.login()
}
}
}
diff --git a/portal/frontend/portal/src/router/index.ts b/portal/frontend/portal/src/router/index.ts
index d41a160..af19dd9 100644
--- a/portal/frontend/portal/src/router/index.ts
+++ b/portal/frontend/portal/src/router/index.ts
@@ -151,7 +151,7 @@ export const dynamicRoutes = [
]
const router = createRouter({
- history: createWebHistory(),
+ history: createWebHistory(import.meta.env.BASE_URL),
routes: constantRoutes,
scrollBehavior(to, from, savedPosition) {
if (savedPosition) {
diff --git a/portal/frontend/portal/vite.config.ts b/portal/frontend/portal/vite.config.ts
index 719333f..9527b4f 100644
--- a/portal/frontend/portal/vite.config.ts
+++ b/portal/frontend/portal/vite.config.ts
@@ -11,7 +11,7 @@ export default defineConfig(({ mode, command }) => {
return {
// 部署生产环境和开发环境下的URL。
// 默认情况下,vite 会假设你的应用是被部署在一个域名的根路径上
- base: VITE_APP_ENV === 'production' ? '/portal-ui' : '/',
+ base: VITE_APP_ENV === 'production' ? '/portal-ui' : '/portal-ui',
plugins: createVitePlugins(env, command === 'build'),
resolve: {
// https://cn.vitejs.dev/config/#resolve-alias
@@ -27,10 +27,20 @@ export default defineConfig(({ mode, command }) => {
// 打包配置
build: {
// https://vite.dev/config/build-options.html
- sourcemap: command === 'build' ? false : 'inline',
+ sourcemap: 'inline',
outDir: 'dist',
assetsDir: 'assets',
chunkSizeWarningLimit: 2000,
+ minify: false,
+ terserOptions: {
+ compress: {
+ drop_console: false, // 不移除 console
+ drop_debugger: false // 不移除 debugger
+ },
+ mangle: false, // 禁用变量名混淆
+ keep_fnames: true, // 保留函数名
+ keep_classnames: true // 保留类名
+ },
rollupOptions: {
output: {
chunkFileNames: 'static/js/[name]-[hash].js',
diff --git a/sdk/backend/oauth2-login-sdk/.gitignore b/sdk/backend/oauth2-login-sdk/.gitignore
new file mode 100644
index 0000000..ccf2540
--- /dev/null
+++ b/sdk/backend/oauth2-login-sdk/.gitignore
@@ -0,0 +1,60 @@
+# Compiled class file
+*.class
+
+# Log file
+*.log
+
+# BlueJ files
+*.ctxt
+
+# Mobile Tools for Java (J2ME)
+.mtj.tmp/
+
+# Package Files #
+*.jar
+*.war
+*.nar
+*.ear
+*.zip
+*.tar.gz
+*.rar
+
+# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
+hs_err_pid*
+
+# IDE-specific files
+.idea/
+*.iml
+*.iws
+*.ipr
+.vscode/
+.project
+.classpath
+.settings/
+
+# OS generated files
+.DS_Store
+Thumbs.db
+
+# Maven
+target/
+pom.xml.tag
+pom.xml.releaseBackup
+pom.xml.versionsBackup
+pom.xml.next
+release.properties
+dependency-reduced-pom.xml
+buildNumber.properties
+
+# Gradle
+.gradle/
+build/
+!gradle/wrapper/gradle-wrapper.jar
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+# SonarQube
+.sonar/
+
+# Test coverage
+jacoco.exec
diff --git a/sdk/backend/oauth2-login-sdk/pom.xml b/sdk/backend/oauth2-login-sdk/pom.xml
index 4a8d065..701f2a3 100644
--- a/sdk/backend/oauth2-login-sdk/pom.xml
+++ b/sdk/backend/oauth2-login-sdk/pom.xml
@@ -8,7 +8,7 @@
1.0-SNAPSHOT
org.lingniu
jar
- OAuth2 Login SDK
+ oauth2-login-sdk
OAuth2登录SDK后端Java版本
17
diff --git a/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/model/token/AccessTokenInfo.java b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/model/token/AccessTokenInfo.java
index dc1282e..f94f750 100644
--- a/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/model/token/AccessTokenInfo.java
+++ b/sdk/backend/oauth2-login-sdk/src/main/java/org/lingniu/sdk/model/token/AccessTokenInfo.java
@@ -116,7 +116,7 @@ public class AccessTokenInfo {
return null;
}
- AccessTokenInfo.AccessTokenInfoBuilder builder = AccessTokenInfo.builder();
+ AccessTokenInfoBuilder builder = AccessTokenInfo.builder();
builder.username((String) map.get("username"));
builder.tokenValue((String) map.get("tokenValue"));
// 处理时间字段
diff --git a/sdk/frontend/oauth2-login-sdk/README.md b/sdk/frontend/oauth2-login-sdk/README.md
deleted file mode 100644
index 563da32..0000000
--- a/sdk/frontend/oauth2-login-sdk/README.md
+++ /dev/null
@@ -1,70 +0,0 @@
-## 安装
-```bash
-npm install oauth2-login-sdk --save
-# 或
-yarn add oauth2-login-sdk
-```
-
-## 快速开始
-
-### 基本使用
-
-```typescript
-// main.ts
-import unifiedLoginSDK from "oauth2-login-sdk"
-
-// 初始化配置
-unifiedLoginSDK.init({
- clientId: import.meta.env.VITE_APP_CLIENT_ID,
- registrationId: import.meta.env.VITE_APP_REGISTRATION_ID,
- storageType: import.meta.env.VITE_APP_STORAGE_TYPE,
- basepath: import.meta.env.VITE_APP_BASE_API,
- idpLogoutUrl: import.meta.env.VITE_APP_IDP_LOGOUT_URL,
- homePage: import.meta.env.VITE_APP_HOME_PAGE
-})
-```
-```properties
-# 配置文件
-VITE_APP_CLIENT_ID=xxx
-VITE_APP_REGISTRATION_ID=xxx
-VITE_APP_STORAGE_TYPE=localStorage
-VITE_APP_IDP_LOGOUT_URL=http://106.14.217.120/idp-ui/logout
-VITE_APP_HOME_PAGE=http://106.14.217.120/portal-ui/index
-```
-```typescript
-// 配置路由导航守卫
-router.beforeEach(async (to, _from, next) => {
- // 打开页面 判断是已认证
- if (!unifiedLoginSDK.isAuthenticated()) {
- // 未认证
- if (to.path === '/oauth2/callback') {
- // 如果是登录回调 进行回调登录
- await unifiedLoginSDK.handleCallback()
- }else{
- // 跳转登录
- await unifiedLoginSDK.login()
- }
- } else {
- //已认证 打开页面
- next()
- }
-})
-
-```
-```typescript
-// 请求后端接口添加token
-const service = axios.create({
- // axios中请求配置有baseURL选项,表示请求URL公共部分
- baseURL: import.meta.env.VITE_APP_BASE_API,
- // 超时
- timeout: 10000
-})
-
-// request拦截器
-import unifiedLoginSDK from "oauth2-login-sdk"
-service.interceptors.request.use((config: any) => {
- if (getToken() && !isToken) {
- config.headers['Authorization'] = unifiedLoginSDK.getToken()
- }
-})
-```
diff --git a/sdk/frontend/oauth2-login-sdk/src/core/http.ts b/sdk/frontend/oauth2-login-sdk/src/core/http.ts
deleted file mode 100644
index 6fc14be..0000000
--- a/sdk/frontend/oauth2-login-sdk/src/core/http.ts
+++ /dev/null
@@ -1,370 +0,0 @@
-/**
- * HTTP客户端
- * 用于与后端API进行通信
- */
-
-/**
- * HTTP请求方法类型
- */
-type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
-
-/**
- * HTTP请求选项
- */
-export interface HttpRequestOptions {
- /** 请求方法 */
- method: HttpMethod;
- /** 请求URL */
- url: string;
- /** 请求头 */
- headers?: Record;
- /** 请求体 */
- body?: any;
- /** 是否需要认证 */
- needAuth?: boolean;
-}
-
-/**
- * HTTP响应类型
- */
-export interface HttpResponse {
- /** 状态码 */
- status: number;
- /** 状态文本 */
- statusText: string;
- /** 响应体 */
- data: T;
- /** 响应头 */
- headers: Record;
-}
-
-/**
- * HTTP错误类型
- */
-export class HttpError extends Error {
- /** 状态码 */
- public status: number;
- /** 状态文本 */
- public statusText: string;
- /** 错误数据 */
- public data: any;
-
- /**
- * 构造函数
- * @param message 错误信息
- * @param status 状态码
- * @param statusText 状态文本
- * @param data 错误数据
- */
- constructor(message: string, status: number, statusText: string, data: any) {
- super(message);
- this.name = 'HttpError';
- this.status = status;
- this.statusText = statusText;
- this.data = data;
- }
-}
-
-/**
- * HTTP客户端类
- */
-export class HttpClient {
- private tokenGetter?: () => string | null;
- private tenantId?: string;
-
- /**
- * 构造函数
- * @param logout
- * @param tokenGetter Token获取函数
- */
- constructor(tokenGetter?: () => string | null) {
- this.tokenGetter = tokenGetter;
-
- }
-
- /**
- * 设置Token获取函数
- * @param tokenGetter Token获取函数
- */
- setTokenGetter(tokenGetter: () => string | null): void {
- this.tokenGetter = tokenGetter;
- }
-
- /**
- * 设置租户ID
- * @param tenantId 租户ID
- */
- setTenantId(tenantId?: string): void {
- this.tenantId = tenantId;
- }
-
- /**
- * 发送HTTP请求
- * @param options 请求选项
- * @returns Promise> 响应结果
- */
- async request(options: HttpRequestOptions): Promise> {
- const {
- method,
- url,
- headers = {},
- body,
- needAuth = true
- } = options;
-
- // 构建请求头
- const requestHeaders: Record = {
- 'Content-Type': 'application/json',
- ...headers
- };
-
- // 添加认证头
- const addAuthHeader = () => {
- if (needAuth && this.tokenGetter) {
- const token = this.tokenGetter();
- if (token) {
- requestHeaders.Authorization = `${token}`;
- }
- }
- };
-
- // 添加租户ID头
- if (this.tenantId) {
- requestHeaders['tenant-id'] = this.tenantId;
- }
-
- addAuthHeader();
-
- // 构建请求配置
- const fetchOptions: RequestInit = {
- method,
- headers: requestHeaders,
- credentials: 'include' // 包含cookie
- };
-
- // 添加请求体
- if (body && (method === 'POST' || method === 'PUT' || method === 'PATCH')) {
- fetchOptions.body = typeof body === 'string' ? body : JSON.stringify(body);
- }
-
- try {
- // 发送请求
- const response = await fetch(url, fetchOptions);
- const responseData = await this.parseResponse(response);
-
- // 检查响应状态
- if (!response.ok) {
- // 如果是401错误,尝试刷新Token并重试
- if (response.status === 401) {
- return {
- status: response.status,
- statusText: response.statusText,
- data: '' as T,
- headers: this.parseHeaders(response.headers)
- }
- }
-
- // 其他错误,直接抛出
- const errorMsg = this.getErrorMessage(responseData);
- throw new HttpError(
- errorMsg,
- response.status,
- response.statusText,
- responseData
- );
- }
-
- // 处理成功响应的业务逻辑
- return this.handleResponse(response, responseData);
- } catch (error) {
- if (error instanceof HttpError) {
- throw error;
- }
-
- // 网络错误或其他错误
- throw new HttpError(
- error instanceof Error ? error.message : 'Network Error',
- 0,
- 'Network Error',
- null
- );
- }
- }
-
-
-
- /**
- * 处理响应数据
- * @param response 响应对象
- * @param responseData 响应数据
- * @returns HttpResponse 处理后的响应
- */
- private handleResponse(response: Response, responseData: any): HttpResponse {
- // 检查是否为业务响应结构
- if (this.isBusinessResponse(responseData)) {
- // 业务响应结构:{ code, msg, data }
- const { code, msg, data } = responseData;
-
- // 检查业务状态码
- if (code !== 0 && code !== 200 && code !== '0' && code !== '200') {
- // 业务错误,抛出HttpError
- throw new HttpError(
- msg || `Business Error: ${code}`,
- response.status,
- response.statusText,
- responseData
- );
- }
-
- // 业务成功,返回data字段作为实际数据
- return {
- status: response.status,
- statusText: response.statusText,
- data: data as T,
- headers: this.parseHeaders(response.headers)
- };
- }
-
- // 非业务响应结构,直接返回原始数据
- return {
- status: response.status,
- statusText: response.statusText,
- data: responseData as T,
- headers: this.parseHeaders(response.headers)
- };
- }
-
- /**
- * 检查是否为业务响应结构
- * @param responseData 响应数据
- * @returns boolean 是否为业务响应结构
- */
- private isBusinessResponse(responseData: any): boolean {
- return typeof responseData === 'object' &&
- responseData !== null &&
- ('code' in responseData) &&
- ('msg' in responseData) &&
- ('data' in responseData);
- }
-
- /**
- * 获取错误信息
- * @param responseData 响应数据
- * @returns string 错误信息
- */
- private getErrorMessage(responseData: any): string {
- // 如果是业务响应结构
- if (this.isBusinessResponse(responseData)) {
- return responseData.msg || `Business Error: ${responseData.code}`;
- }
-
- // 其他错误结构
- return responseData.message || responseData.error || `HTTP Error`;
- }
-
- /**
- * GET请求
- * @param url 请求URL
- * @param options 请求选项
- * @returns Promise> 响应结果
- */
- async get(url: string, options?: Omit): Promise> {
- return this.request({
- method: 'GET',
- url,
- ...options
- });
- }
-
- /**
- * POST请求
- * @param url 请求URL
- * @param body 请求体
- * @param options 请求选项
- * @returns Promise> 响应结果
- */
- async post(url: string, body?: any, options?: Omit): Promise> {
- return this.request({
- method: 'POST',
- url,
- body,
- ...options
- });
- }
-
- /**
- * PUT请求
- * @param url 请求URL
- * @param body 请求体
- * @param options 请求选项
- * @returns Promise> 响应结果
- */
- async put(url: string, body?: any, options?: Omit): Promise> {
- return this.request({
- method: 'PUT',
- url,
- body,
- ...options
- });
- }
-
- /**
- * DELETE请求
- * @param url 请求URL
- * @param options 请求选项
- * @returns Promise> 响应结果
- */
- async delete(url: string, options?: Omit): Promise> {
- return this.request({
- method: 'DELETE',
- url,
- ...options
- });
- }
-
- /**
- * PATCH请求
- * @param url 请求URL
- * @param body 请求体
- * @param options 请求选项
- * @returns Promise> 响应结果
- */
- async patch(url: string, body?: any, options?: Omit): Promise> {
- return this.request({
- method: 'PATCH',
- url,
- body,
- ...options
- });
- }
-
- /**
- * 解析响应体
- * @param response 响应对象
- * @returns Promise 解析后的响应体
- */
- private async parseResponse(response: Response): Promise {
- const contentType = response.headers.get('content-type') || '';
-
- if (contentType.includes('application/json')) {
- return response.json();
- } else if (contentType.includes('text/')) {
- return response.text();
- } else {
- return response.blob();
- }
- }
-
- /**
- * 解析响应头
- * @param headers 响应头对象
- * @returns Record 解析后的响应头
- */
- private parseHeaders(headers: Headers): Record {
- const result: Record = {};
- headers.forEach((value, key) => {
- result[key] = value;
- });
- return result;
- }
-}
diff --git a/sdk/frontend/oauth2-login-sdk/src/core/token.ts b/sdk/frontend/oauth2-login-sdk/src/core/token.ts
deleted file mode 100644
index bf353a6..0000000
--- a/sdk/frontend/oauth2-login-sdk/src/core/token.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * Token管理模块
- * 负责Token的存储、获取、刷新和过期处理
- */
-
-import { Storage } from '../utils/storage';
-
-/**
- * Token管理类
- */
-export class TokenManager {
- private storage: Storage;
-
- /**
- * 构造函数
- * @param storage 存储实例
- * @param httpClient HTTP客户端实例
- */
- constructor(storage: Storage) {
- this.storage = storage;
- }
-
- /**
- * 存储Token信息
- * @param tokenInfo Token信息
- */
- saveToken(tokenInfo: string): void {
- this.storage.set('token', tokenInfo);
- }
-
- /**
- * 获取Token信息
- * @returns TokenInfo | null Token信息
- */
- getToken(): string | null {
- return this.storage.get('token');
- }
-
- /**
- * 清除Token信息
- */
- clearToken(): void {
- this.storage.remove('token');
- }
-}
diff --git a/sdk/frontend/oauth2-login-sdk/src/guards/router.ts b/sdk/frontend/oauth2-login-sdk/src/guards/router.ts
deleted file mode 100644
index f1df6a6..0000000
--- a/sdk/frontend/oauth2-login-sdk/src/guards/router.ts
+++ /dev/null
@@ -1,130 +0,0 @@
-/**
- * 路由守卫模块
- * 提供基于权限的路由拦截和未登录自动跳转登录页功能
- */
-
-import { Auth } from '../core/auth';
-
-/**
- * 路由守卫选项
- */
-export interface RouterGuardOptions {
- /**
- * 是否需要登录
- */
- requiresAuth?: boolean;
- /**
- * 需要的权限列表
- */
- requiredPermissions?: string[];
- /**
- * 登录后重定向的URL
- */
- redirectUri?: string;
- /**
- * 权限不足时重定向的URL
- */
- unauthorizedRedirectUri?: string;
-}
-
-/**
- * 路由守卫类
- */
-export class RouterGuard {
- private auth: Auth;
-
- /**
- * 构造函数
- * @param auth 认证实例
- */
- constructor(auth: Auth) {
- this.auth = auth;
- }
-
- /**
- * 检查路由权限
- * @param options 路由守卫选项
- * @returns Promise 是否通过权限检查
- */
- async check(options: RouterGuardOptions): Promise {
- const { requiresAuth = true, requiredPermissions = [] } = options;
-
- // 检查是否需要登录
- if (requiresAuth) {
- // 检查是否已认证
- if (!this.auth.isAuthenticated()) {
- // 未认证,跳转到登录页
- this.auth.login(options.redirectUri);
- return false;
- }
-
- // 检查是否需要权限
- if (requiredPermissions.length > 0) {
- // 获取用户权限
- const userPermissions = [''];
-
- // 检查是否拥有所有需要的权限
- const hasPermission = requiredPermissions.every(permission =>
- userPermissions.includes(permission)
- );
-
- if (!hasPermission) {
- // 权限不足,跳转到权限不足页
- if (options.unauthorizedRedirectUri) {
- window.location.href = options.unauthorizedRedirectUri;
- }
- return false;
- }
- }
- }
-
- return true;
- }
-
- /**
- * 创建Vue路由守卫
- * @returns 路由守卫函数
- */
- createVueGuard() {
- return async (to: any, from: any, next: any) => {
- // 从路由元信息中获取守卫选项
- const options: RouterGuardOptions = to.meta?.auth || {};
-
- try {
- const allowed = await this.check(options);
- if (allowed) {
- next();
- }
- } catch (error) {
- console.error('Route guard error:', error);
- next(false);
- }
- };
- }
-
- /**
- * 检查当前用户是否有权限访问资源
- * @param permissions 需要的权限列表
- * @returns Promise 是否拥有权限
- */
- async hasPermission(permissions: string | string[]): Promise {
- if (!permissions) {
- return true;
- }
-
- const requiredPermissions = Array.isArray(permissions) ? permissions : [permissions];
-
- // 检查是否已认证
- if (!this.auth.isAuthenticated()) {
- return false;
- }
-
- // 获取用户权限
- const userPermissions = ['']
-
- // 检查是否拥有所有需要的权限
- return requiredPermissions.every(permission =>
- userPermissions.includes(permission)
- );
- }
-}
diff --git a/sdk/frontend/oauth2-login-sdk/src/index.ts b/sdk/frontend/oauth2-login-sdk/src/index.ts
deleted file mode 100644
index 08387bc..0000000
--- a/sdk/frontend/oauth2-login-sdk/src/index.ts
+++ /dev/null
@@ -1,94 +0,0 @@
-/**
- * 统一登录SDK入口文件
- * 支持OAuth2授权码模式,提供完整的Token管理和用户信息管理功能
- */
-
-// 导出核心类和功能
-export { Auth } from './core/auth';
-export { TokenManager } from './core/token';
-export { HttpClient, HttpError } from './core/http';
-export { Storage } from './utils/storage';
-export { RouterGuard, RouterGuardOptions } from './guards/router';
-
-// 导出工具函数
-export {
- generateRandomString,
- parseQueryParams,
- buildQueryParams,
- generateAuthorizationUrl,
- isCallbackUrl
-} from './utils/url';
-
-// 导出类型定义
-export * from './types';
-
-// 导出Vue插件
-export { VuePlugin, createVuePlugin } from './plugins/vue';
-
-// 创建默认SDK实例
-import { SDKConfig, UnifiedLoginSDK } from './types';
-import { Auth as AuthCore } from './core/auth';
-import { Storage as StorageCore } from './utils/storage';
-
-/**
- * 默认SDK实例
- */
-const defaultStorage = new StorageCore();
-const defaultAuth = new AuthCore(defaultStorage);
-
-/**
- * 默认导出的SDK实例
- */
-export const unifiedLoginSDK: UnifiedLoginSDK = {
- init: (config: SDKConfig) => {
- defaultAuth.init(config);
- },
- getToken: () => {
- return defaultAuth.getToken()
- },
- login: (redirectUri?: string) => {
- return defaultAuth.login(redirectUri);
- },
- logout: () => {
- return defaultAuth.logout();
- },
- handleCallback: () => {
- return defaultAuth.handleCallback();
- },
- getRoutes: () => {
- return defaultAuth.getRoutes();
- },
- getUserInfo: () => {
- return defaultAuth.getUserInfo();
- },
- isAuthenticated: () => {
- return defaultAuth.isAuthenticated();
- },
- hasRole: (role: string | string[]) => {
- return defaultAuth.hasRole(role);
- },
- hasAllRoles: (roles: string[]) => {
- return defaultAuth.hasAllRoles(roles);
- },
- hasPermission: (permission: string | string[]) => {
- return defaultAuth.hasPermission(permission);
- },
- hasAllPermissions: (permissions: string[]) => {
- return defaultAuth.hasAllPermissions(permissions);
- },
- on: (event, callback) => {
- return defaultAuth.on(event, callback);
- },
- off: (event, callback) => {
- return defaultAuth.off(event, callback);
- },
- isCallback: () => {
- return defaultAuth.isCallback();
- }
-};
-
-// 默认导出
-export default unifiedLoginSDK;
-
-// 版本信息
-export const version = '1.0.0';
diff --git a/sdk/frontend/unified-login-sdk/.gitignore b/sdk/frontend/unified-login-sdk/.gitignore
new file mode 100644
index 0000000..ccf2540
--- /dev/null
+++ b/sdk/frontend/unified-login-sdk/.gitignore
@@ -0,0 +1,60 @@
+# Compiled class file
+*.class
+
+# Log file
+*.log
+
+# BlueJ files
+*.ctxt
+
+# Mobile Tools for Java (J2ME)
+.mtj.tmp/
+
+# Package Files #
+*.jar
+*.war
+*.nar
+*.ear
+*.zip
+*.tar.gz
+*.rar
+
+# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
+hs_err_pid*
+
+# IDE-specific files
+.idea/
+*.iml
+*.iws
+*.ipr
+.vscode/
+.project
+.classpath
+.settings/
+
+# OS generated files
+.DS_Store
+Thumbs.db
+
+# Maven
+target/
+pom.xml.tag
+pom.xml.releaseBackup
+pom.xml.versionsBackup
+pom.xml.next
+release.properties
+dependency-reduced-pom.xml
+buildNumber.properties
+
+# Gradle
+.gradle/
+build/
+!gradle/wrapper/gradle-wrapper.jar
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+# SonarQube
+.sonar/
+
+# Test coverage
+jacoco.exec
diff --git a/sdk/frontend/unified-login-sdk/README.md b/sdk/frontend/unified-login-sdk/README.md
new file mode 100644
index 0000000..3ef40be
--- /dev/null
+++ b/sdk/frontend/unified-login-sdk/README.md
@@ -0,0 +1,119 @@
+# Unified Login SDK
+
+统一登录前端SDK,基于OAuth2协议实现前后端分离项目的认证和权限管理。
+
+## 安装
+
+```bash
+npm install unified-login-sdk
+```
+
+## 快速开始
+
+### 基础使用
+
+```javascript
+import unifiedLoginSDK from 'unified-login-sdk';
+
+// 初始化配置
+unifiedLoginSDK.init({
+ clientId: 'your-client-id',
+ basepath: 'https://api.example.com',
+ homePage: '/dashboard',
+ idpLogoutUrl: 'https://idp.example.com/logout'
+});
+
+// 检查登录状态
+if (!unifiedLoginSDK.isAuthenticated()) {
+ // 执行登录
+ await unifiedLoginSDK.login();
+}
+
+// 获取用户信息
+const userInfo = unifiedLoginSDK.getUserInfo();
+console.log('欢迎:', userInfo.nickName);
+```
+
+### Vue 3 集成
+
+```javascript
+// main.js
+import { createApp } from 'vue';
+import { createVuePlugin } from 'unified-login-sdk';
+
+const app = createApp(App);
+const loginPlugin = createVuePlugin('localStorage');
+
+app.use(loginPlugin, {
+ config: {
+ clientId: 'your-client-id',
+ basepath: 'https://api.example.com',
+ homePage: '/dashboard',
+ idpLogoutUrl: 'https://idp.example.com/logout'
+ }
+});
+
+app.mount('#app');
+```
+
+### 权限检查
+
+```javascript
+// 检查单个权限
+const hasPermission = await unifiedLoginSDK.hasPermission('user:read');
+
+// 检查多个权限
+const hasAllPermissions = await unifiedLoginSDK.hasAllPermissions(['user:read', 'user:write']);
+
+// 检查角色
+const hasRole = await unifiedLoginSDK.hasRole('admin');
+```
+
+## 核心功能
+
+- ✅ OAuth2认证流程
+- ✅ Token自动管理
+- ✅ 用户信息获取
+- ✅ 权限和角色检查
+- ✅ Vue 2/3插件支持
+- ✅ 路由守卫集成
+- ✅ 事件监听机制
+
+## API参考
+
+### 主要方法
+
+| 方法 | 说明 | 参数 | 返回值 |
+|------|------|------|--------|
+| `init(config)` | 初始化SDK | 配置对象 | void |
+| `login()` | 执行登录 | redirectUri(可选) | Promise |
+| `logout()` | 退出登录 | 无 | Promise |
+| `isAuthenticated()` | 检查认证状态 | 无 | boolean |
+| `getUserInfo()` | 获取用户信息 | 无 | UserInfo |
+| `hasPermission(permission)` | 检查权限 | 权限标识 | Promise |
+| `hasRole(role)` | 检查角色 | 角色标识 | Promise |
+
+### 事件监听
+
+```javascript
+// 登录事件
+unifiedLoginSDK.on('login', () => {
+ console.log('用户已登录');
+});
+
+// 退出事件
+unifiedLoginSDK.on('logout', () => {
+ console.log('用户已退出');
+});
+```
+
+## 浏览器支持
+
+- Chrome (推荐)
+- Firefox
+- Safari
+- Edge
+
+## 许可证
+
+MIT
\ No newline at end of file
diff --git a/sdk/frontend/oauth2-login-sdk/dist/core/auth.d.ts b/sdk/frontend/unified-login-sdk/dist/core/auth.d.ts
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/core/auth.d.ts
rename to sdk/frontend/unified-login-sdk/dist/core/auth.d.ts
diff --git a/sdk/frontend/oauth2-login-sdk/dist/core/auth.d.ts.map b/sdk/frontend/unified-login-sdk/dist/core/auth.d.ts.map
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/core/auth.d.ts.map
rename to sdk/frontend/unified-login-sdk/dist/core/auth.d.ts.map
diff --git a/sdk/frontend/oauth2-login-sdk/dist/core/auth.js b/sdk/frontend/unified-login-sdk/dist/core/auth.js
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/core/auth.js
rename to sdk/frontend/unified-login-sdk/dist/core/auth.js
diff --git a/sdk/frontend/oauth2-login-sdk/dist/core/auth.js.map b/sdk/frontend/unified-login-sdk/dist/core/auth.js.map
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/core/auth.js.map
rename to sdk/frontend/unified-login-sdk/dist/core/auth.js.map
diff --git a/sdk/frontend/oauth2-login-sdk/dist/core/http.d.ts b/sdk/frontend/unified-login-sdk/dist/core/http.d.ts
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/core/http.d.ts
rename to sdk/frontend/unified-login-sdk/dist/core/http.d.ts
diff --git a/sdk/frontend/oauth2-login-sdk/dist/core/http.d.ts.map b/sdk/frontend/unified-login-sdk/dist/core/http.d.ts.map
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/core/http.d.ts.map
rename to sdk/frontend/unified-login-sdk/dist/core/http.d.ts.map
diff --git a/sdk/frontend/oauth2-login-sdk/dist/core/http.js b/sdk/frontend/unified-login-sdk/dist/core/http.js
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/core/http.js
rename to sdk/frontend/unified-login-sdk/dist/core/http.js
diff --git a/sdk/frontend/oauth2-login-sdk/dist/core/http.js.map b/sdk/frontend/unified-login-sdk/dist/core/http.js.map
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/core/http.js.map
rename to sdk/frontend/unified-login-sdk/dist/core/http.js.map
diff --git a/sdk/frontend/oauth2-login-sdk/dist/core/token.d.ts b/sdk/frontend/unified-login-sdk/dist/core/token.d.ts
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/core/token.d.ts
rename to sdk/frontend/unified-login-sdk/dist/core/token.d.ts
diff --git a/sdk/frontend/oauth2-login-sdk/dist/core/token.d.ts.map b/sdk/frontend/unified-login-sdk/dist/core/token.d.ts.map
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/core/token.d.ts.map
rename to sdk/frontend/unified-login-sdk/dist/core/token.d.ts.map
diff --git a/sdk/frontend/oauth2-login-sdk/dist/core/token.js b/sdk/frontend/unified-login-sdk/dist/core/token.js
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/core/token.js
rename to sdk/frontend/unified-login-sdk/dist/core/token.js
diff --git a/sdk/frontend/oauth2-login-sdk/dist/core/token.js.map b/sdk/frontend/unified-login-sdk/dist/core/token.js.map
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/core/token.js.map
rename to sdk/frontend/unified-login-sdk/dist/core/token.js.map
diff --git a/sdk/frontend/oauth2-login-sdk/dist/guards/router.d.ts b/sdk/frontend/unified-login-sdk/dist/guards/router.d.ts
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/guards/router.d.ts
rename to sdk/frontend/unified-login-sdk/dist/guards/router.d.ts
diff --git a/sdk/frontend/oauth2-login-sdk/dist/guards/router.d.ts.map b/sdk/frontend/unified-login-sdk/dist/guards/router.d.ts.map
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/guards/router.d.ts.map
rename to sdk/frontend/unified-login-sdk/dist/guards/router.d.ts.map
diff --git a/sdk/frontend/oauth2-login-sdk/dist/guards/router.js b/sdk/frontend/unified-login-sdk/dist/guards/router.js
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/guards/router.js
rename to sdk/frontend/unified-login-sdk/dist/guards/router.js
diff --git a/sdk/frontend/oauth2-login-sdk/dist/guards/router.js.map b/sdk/frontend/unified-login-sdk/dist/guards/router.js.map
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/guards/router.js.map
rename to sdk/frontend/unified-login-sdk/dist/guards/router.js.map
diff --git a/sdk/frontend/oauth2-login-sdk/dist/index.d.ts b/sdk/frontend/unified-login-sdk/dist/index.d.ts
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/index.d.ts
rename to sdk/frontend/unified-login-sdk/dist/index.d.ts
diff --git a/sdk/frontend/oauth2-login-sdk/dist/index.d.ts.map b/sdk/frontend/unified-login-sdk/dist/index.d.ts.map
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/index.d.ts.map
rename to sdk/frontend/unified-login-sdk/dist/index.d.ts.map
diff --git a/sdk/frontend/oauth2-login-sdk/dist/index.esm.js b/sdk/frontend/unified-login-sdk/dist/index.esm.js
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/index.esm.js
rename to sdk/frontend/unified-login-sdk/dist/index.esm.js
diff --git a/sdk/frontend/oauth2-login-sdk/dist/index.esm.js.map b/sdk/frontend/unified-login-sdk/dist/index.esm.js.map
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/index.esm.js.map
rename to sdk/frontend/unified-login-sdk/dist/index.esm.js.map
diff --git a/sdk/frontend/oauth2-login-sdk/dist/index.js b/sdk/frontend/unified-login-sdk/dist/index.js
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/index.js
rename to sdk/frontend/unified-login-sdk/dist/index.js
diff --git a/sdk/frontend/oauth2-login-sdk/dist/index.js.map b/sdk/frontend/unified-login-sdk/dist/index.js.map
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/index.js.map
rename to sdk/frontend/unified-login-sdk/dist/index.js.map
diff --git a/sdk/frontend/oauth2-login-sdk/dist/plugins/vue.d.ts b/sdk/frontend/unified-login-sdk/dist/plugins/vue.d.ts
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/plugins/vue.d.ts
rename to sdk/frontend/unified-login-sdk/dist/plugins/vue.d.ts
diff --git a/sdk/frontend/oauth2-login-sdk/dist/plugins/vue.d.ts.map b/sdk/frontend/unified-login-sdk/dist/plugins/vue.d.ts.map
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/plugins/vue.d.ts.map
rename to sdk/frontend/unified-login-sdk/dist/plugins/vue.d.ts.map
diff --git a/sdk/frontend/oauth2-login-sdk/dist/plugins/vue.js b/sdk/frontend/unified-login-sdk/dist/plugins/vue.js
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/plugins/vue.js
rename to sdk/frontend/unified-login-sdk/dist/plugins/vue.js
diff --git a/sdk/frontend/oauth2-login-sdk/dist/plugins/vue.js.map b/sdk/frontend/unified-login-sdk/dist/plugins/vue.js.map
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/plugins/vue.js.map
rename to sdk/frontend/unified-login-sdk/dist/plugins/vue.js.map
diff --git a/sdk/frontend/oauth2-login-sdk/dist/types/config.d.ts b/sdk/frontend/unified-login-sdk/dist/types/config.d.ts
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/types/config.d.ts
rename to sdk/frontend/unified-login-sdk/dist/types/config.d.ts
diff --git a/sdk/frontend/oauth2-login-sdk/dist/types/config.d.ts.map b/sdk/frontend/unified-login-sdk/dist/types/config.d.ts.map
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/types/config.d.ts.map
rename to sdk/frontend/unified-login-sdk/dist/types/config.d.ts.map
diff --git a/sdk/frontend/oauth2-login-sdk/dist/types/config.js b/sdk/frontend/unified-login-sdk/dist/types/config.js
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/types/config.js
rename to sdk/frontend/unified-login-sdk/dist/types/config.js
diff --git a/sdk/frontend/oauth2-login-sdk/dist/types/config.js.map b/sdk/frontend/unified-login-sdk/dist/types/config.js.map
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/types/config.js.map
rename to sdk/frontend/unified-login-sdk/dist/types/config.js.map
diff --git a/sdk/frontend/oauth2-login-sdk/dist/types/index.d.ts b/sdk/frontend/unified-login-sdk/dist/types/index.d.ts
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/types/index.d.ts
rename to sdk/frontend/unified-login-sdk/dist/types/index.d.ts
diff --git a/sdk/frontend/oauth2-login-sdk/dist/types/index.d.ts.map b/sdk/frontend/unified-login-sdk/dist/types/index.d.ts.map
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/types/index.d.ts.map
rename to sdk/frontend/unified-login-sdk/dist/types/index.d.ts.map
diff --git a/sdk/frontend/oauth2-login-sdk/dist/types/index.js b/sdk/frontend/unified-login-sdk/dist/types/index.js
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/types/index.js
rename to sdk/frontend/unified-login-sdk/dist/types/index.js
diff --git a/sdk/frontend/oauth2-login-sdk/dist/types/index.js.map b/sdk/frontend/unified-login-sdk/dist/types/index.js.map
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/types/index.js.map
rename to sdk/frontend/unified-login-sdk/dist/types/index.js.map
diff --git a/sdk/frontend/oauth2-login-sdk/dist/types/user.d.ts b/sdk/frontend/unified-login-sdk/dist/types/user.d.ts
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/types/user.d.ts
rename to sdk/frontend/unified-login-sdk/dist/types/user.d.ts
diff --git a/sdk/frontend/oauth2-login-sdk/dist/types/user.d.ts.map b/sdk/frontend/unified-login-sdk/dist/types/user.d.ts.map
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/types/user.d.ts.map
rename to sdk/frontend/unified-login-sdk/dist/types/user.d.ts.map
diff --git a/sdk/frontend/oauth2-login-sdk/dist/types/user.js b/sdk/frontend/unified-login-sdk/dist/types/user.js
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/types/user.js
rename to sdk/frontend/unified-login-sdk/dist/types/user.js
diff --git a/sdk/frontend/oauth2-login-sdk/dist/types/user.js.map b/sdk/frontend/unified-login-sdk/dist/types/user.js.map
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/types/user.js.map
rename to sdk/frontend/unified-login-sdk/dist/types/user.js.map
diff --git a/sdk/frontend/oauth2-login-sdk/dist/utils/storage.d.ts b/sdk/frontend/unified-login-sdk/dist/utils/storage.d.ts
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/utils/storage.d.ts
rename to sdk/frontend/unified-login-sdk/dist/utils/storage.d.ts
diff --git a/sdk/frontend/oauth2-login-sdk/dist/utils/storage.d.ts.map b/sdk/frontend/unified-login-sdk/dist/utils/storage.d.ts.map
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/utils/storage.d.ts.map
rename to sdk/frontend/unified-login-sdk/dist/utils/storage.d.ts.map
diff --git a/sdk/frontend/oauth2-login-sdk/dist/utils/storage.js b/sdk/frontend/unified-login-sdk/dist/utils/storage.js
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/utils/storage.js
rename to sdk/frontend/unified-login-sdk/dist/utils/storage.js
diff --git a/sdk/frontend/oauth2-login-sdk/dist/utils/storage.js.map b/sdk/frontend/unified-login-sdk/dist/utils/storage.js.map
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/utils/storage.js.map
rename to sdk/frontend/unified-login-sdk/dist/utils/storage.js.map
diff --git a/sdk/frontend/oauth2-login-sdk/dist/utils/url.d.ts b/sdk/frontend/unified-login-sdk/dist/utils/url.d.ts
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/utils/url.d.ts
rename to sdk/frontend/unified-login-sdk/dist/utils/url.d.ts
diff --git a/sdk/frontend/oauth2-login-sdk/dist/utils/url.d.ts.map b/sdk/frontend/unified-login-sdk/dist/utils/url.d.ts.map
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/utils/url.d.ts.map
rename to sdk/frontend/unified-login-sdk/dist/utils/url.d.ts.map
diff --git a/sdk/frontend/oauth2-login-sdk/dist/utils/url.js b/sdk/frontend/unified-login-sdk/dist/utils/url.js
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/utils/url.js
rename to sdk/frontend/unified-login-sdk/dist/utils/url.js
diff --git a/sdk/frontend/oauth2-login-sdk/dist/utils/url.js.map b/sdk/frontend/unified-login-sdk/dist/utils/url.js.map
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/dist/utils/url.js.map
rename to sdk/frontend/unified-login-sdk/dist/utils/url.js.map
diff --git a/sdk/frontend/oauth2-login-sdk/package.json b/sdk/frontend/unified-login-sdk/package.json
similarity index 96%
rename from sdk/frontend/oauth2-login-sdk/package.json
rename to sdk/frontend/unified-login-sdk/package.json
index 5bc200b..2813de7 100644
--- a/sdk/frontend/oauth2-login-sdk/package.json
+++ b/sdk/frontend/unified-login-sdk/package.json
@@ -1,5 +1,5 @@
{
- "name": "oauth2-login-sdk",
+ "name": "unified-login-sdk",
"version": "1.0.0",
"description": "TypeScript前端SDK,用于前后端分离项目对接统一登录系统",
"main": "dist/index.js",
diff --git a/sdk/frontend/oauth2-login-sdk/pnpm-lock.yaml b/sdk/frontend/unified-login-sdk/pnpm-lock.yaml
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/pnpm-lock.yaml
rename to sdk/frontend/unified-login-sdk/pnpm-lock.yaml
diff --git a/sdk/frontend/oauth2-login-sdk/rollup.config.js b/sdk/frontend/unified-login-sdk/rollup.config.js
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/rollup.config.js
rename to sdk/frontend/unified-login-sdk/rollup.config.js
diff --git a/sdk/frontend/oauth2-login-sdk/src/core/auth.ts b/sdk/frontend/unified-login-sdk/src/core/auth.ts
similarity index 65%
rename from sdk/frontend/oauth2-login-sdk/src/core/auth.ts
rename to sdk/frontend/unified-login-sdk/src/core/auth.ts
index 9a9ea2b..800df43 100644
--- a/sdk/frontend/oauth2-login-sdk/src/core/auth.ts
+++ b/sdk/frontend/unified-login-sdk/src/core/auth.ts
@@ -14,9 +14,9 @@ import {buildQueryParams, isCallbackUrl, parseQueryParams} from '../utils/url';
*/
export class Auth {
private config: SDKConfig | null = null;
- private tokenManager: TokenManager;
+ private tokenManager!: TokenManager;
private httpClient: HttpClient;
- private storage: Storage;
+ private readonly storage: Storage;
private eventHandlers: Record = {
login: [],
logout: [],
@@ -30,10 +30,11 @@ export class Auth {
*/
constructor(storage: Storage) {
this.storage = storage;
- // 先创建HttpClient,初始时tokenManager为undefined
- this.httpClient = new HttpClient(() => this.tokenManager.getToken() || null);
- // 然后创建TokenManager
- this.tokenManager = new TokenManager(storage);
+ // 创建带有基础配置的HttpClient
+ this.httpClient = new HttpClient({
+ timeout: 15000,
+ withCredentials: true
+ });
}
/**
@@ -42,8 +43,18 @@ export class Auth {
*/
init(config: SDKConfig): void {
this.config = config;
- // 设置租户ID到HTTP客户端
- this.httpClient.setTenantId(config.tenantId);
+
+ // 更新HTTP客户端配置
+ this.httpClient.updateConfig({
+ baseURL: config.basepath || '',
+ tenantId: config.tenantId
+ });
+
+ // 创建TokenManager
+ this.tokenManager = new TokenManager(this.storage, this.config.clientId);
+
+ // 设置Token获取函数
+ this.httpClient.setTokenGetter(() => this.getToken());
}
getToken():string | null{
@@ -59,12 +70,20 @@ export class Auth {
throw new Error('SDK not initialized');
}
const registrationId = this.config.registrationId || 'idp'
- const basepath = this.config.basepath || ''
- const path = `${basepath}/oauth2/authorization/${registrationId}`
+ const path = `/oauth2/authorization/${registrationId}`
const tokenResponse = await this.httpClient.get(path,{needAuth:false})
const redirect = tokenResponse.data.redirect_url
const params = parseQueryParams(redirect)
- this.storage.set(params.state,window.location.href)
+
+ // 安全存储当前页面URL用于回调后重定向
+ if (params.state) {
+ // 确保存储的URL是有效的
+ const currentUrl = redirectUri || window.location.href;
+ const safeUrl = currentUrl && typeof currentUrl === 'string' ? currentUrl : '/';
+ this.storage.set(params.state, safeUrl);
+ console.log('💾 存储重定向状态:', params.state, '->', safeUrl);
+ }
+
window.location.href = redirect
}
@@ -75,12 +94,10 @@ export class Auth {
if (!this.config) {
throw new Error('SDK not initialized');
}
- // 清除本地存储的Token和用户信息
+ // 清除本地存储的Token和用户信息缓存
this.tokenManager.clearToken();
this.userInfoCache = null;
- this.storage.remove('userInfo');
- const basepath = this.config.basepath || ''
- await this.httpClient.post(`${basepath}/logout`,null,{needAuth:true})
+ await this.httpClient.post(`/logout`,null,{needAuth:true})
// 触发退出事件
this.emit('logout');
window.location.href = this.config.idpLogoutUrl+'?redirect='+this.config.homePage;
@@ -108,8 +125,7 @@ export class Auth {
}
const registrationId = this.config.registrationId || 'idp'
- const basepath = this.config.basepath || ''
- const callback = `${basepath}/login/oauth2/code/${registrationId}${buildQueryParams(params)}`
+ const callback = `/login/oauth2/code/${registrationId}${buildQueryParams(params)}`
const tokenResponse = await this.httpClient.get(callback,{
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
@@ -118,13 +134,27 @@ export class Auth {
})
// 触发登录事件
this.emit('login');
- this.storage.set('userInfo', tokenResponse.data.data);
+ // 缓存用户信息
+ this.userInfoCache = tokenResponse.data.data;
this.tokenManager.saveToken(tokenResponse.headers['authorization']||tokenResponse.headers['Authorization'])
- let url = this.config.homePage
- if(params.state){
- url = this.storage.get(params.state) || url;
+ // 安全处理重定向URL
+ let redirectUrl = this.config.homePage || '/';
+
+ if (params.state) {
+ const storedUrl = this.storage.get(params.state);
+ if (storedUrl && typeof storedUrl === 'string') {
+ redirectUrl = storedUrl;
+ }
+ this.storage.remove(params.state);
}
- window.location.href = url;
+
+ // 确保URL格式正确
+ if (!redirectUrl.startsWith('http') && !redirectUrl.startsWith('/')) {
+ redirectUrl = '/' + redirectUrl;
+ }
+
+ console.log('🔄 重定向到:', redirectUrl);
+ window.location.href = redirectUrl;
}
@@ -132,20 +162,50 @@ export class Auth {
if (!this.config) {
throw new Error('SDK not initialized');
}
- const basepath = this.config.basepath || ''
- const tokenResponse = await this.httpClient.get(`${basepath}/idp/routes`,{needAuth:true})
+ const tokenResponse = await this.httpClient.get(`/idp/routes`,{needAuth:true})
if(tokenResponse.status===401){
await this.logout()
}
return tokenResponse.data.data
}
+ /**
+ * 刷新用户信息缓存
+ * @returns Promise 更新后的用户信息
+ */
+ async refreshUserInfo(): Promise {
+ console.log('🔄 刷新用户信息缓存...');
+ this.userInfoCache = null; // 清除缓存
+ return await this.getUserInfo(); // 重新获取
+ }
+
/**
* 获取用户信息
* @returns UserInfo 用户信息
*/
- getUserInfo(): UserInfo {
- return this.storage.get("userInfo");
+ async getUserInfo(): Promise {
+ // 首先检查缓存
+ if (this.userInfoCache) {
+ console.log('📋 从缓存获取用户信息');
+ return this.userInfoCache;
+ }
+
+ // 检查是否已认证
+ if (!this.isAuthenticated()) {
+ throw new Error('User not authenticated');
+ }
+
+ try {
+ // 从后端接口获取用户信息
+ console.log('🌐 从后端获取用户信息...');
+ const response = await this.httpClient.get('/idp/getUserInfo', { needAuth: true });
+ this.userInfoCache = response.data;
+ console.log('✅ 用户信息获取成功');
+ return this.userInfoCache!;
+ } catch (error) {
+ console.error('❌ 获取用户信息失败:', error);
+ throw error;
+ }
}
@@ -161,7 +221,7 @@ export class Auth {
return false;
}
- const userInfo:UserInfo = this.storage.get("userInfo");
+ const userInfo = await this.getUserInfo();
const roleCodes = userInfo.roles||[];
if (Array.isArray(role)) {
@@ -183,7 +243,7 @@ export class Auth {
return false;
}
- const userInfo:UserInfo = this.storage.get("userInfo");
+ const userInfo = await this.getUserInfo();
const roleCodes = userInfo.roles||[];
// 检查是否有所有角色
return roles.every(r => roleCodes.includes(r));
@@ -199,7 +259,7 @@ export class Auth {
return false;
}
- const userInfo:UserInfo = this.storage.get("userInfo");
+ const userInfo = await this.getUserInfo();
const permissions = userInfo.permissions||[];
if (Array.isArray(permission)) {
@@ -221,7 +281,7 @@ export class Auth {
return false;
}
- const userInfo:UserInfo = this.storage.get("userInfo");
+ const userInfo = await this.getUserInfo();
const userPermissions = userInfo.permissions||[];
// 检查是否有所有权限
diff --git a/sdk/frontend/unified-login-sdk/src/core/http.examples.ts b/sdk/frontend/unified-login-sdk/src/core/http.examples.ts
new file mode 100644
index 0000000..64f6ce5
--- /dev/null
+++ b/sdk/frontend/unified-login-sdk/src/core/http.examples.ts
@@ -0,0 +1,287 @@
+/**
+ * HTTP客户端使用示例
+ */
+
+import { HttpClient, RequestInterceptor, ResponseInterceptor } from './http';
+import { Storage } from '../utils/storage';
+
+// 基础使用示例
+export function basicUsageExample() {
+ // 创建HTTP客户端实例
+ const httpClient = new HttpClient({
+ baseURL: 'https://api.example.com',
+ timeout: 10000,
+ withCredentials: true
+ });
+
+ // 设置Token获取函数
+ httpClient.setTokenGetter(() => {
+ // 从TokenManager或其他地方获取Token
+ return localStorage.getItem('auth_token') || '';
+ });
+
+ // 设置租户ID
+ httpClient.setTenantId('tenant-123');
+
+ return httpClient;
+}
+
+// 拦截器使用示例
+export function interceptorExample() {
+ const httpClient = new HttpClient();
+
+ // 请求拦截器 - 添加通用头信息
+ const authInterceptor: RequestInterceptor = {
+ onRequest: (options) => {
+ // 添加认证头
+ const token = localStorage.getItem('auth_token');
+ if (token) {
+ options.headers = {
+ ...options.headers,
+ 'Authorization': `Bearer ${token}`
+ };
+ }
+
+ // 添加请求ID用于追踪
+ options.headers = {
+ ...options.headers,
+ 'X-Request-ID': Math.random().toString(36).substr(2, 9)
+ };
+
+ return options;
+ },
+ onRequestError: (error) => {
+ console.error('请求拦截器错误:', error);
+ return Promise.reject(error);
+ }
+ };
+
+ // 响应拦截器 - 统一处理响应格式
+ const responseInterceptor: ResponseInterceptor = {
+ onResponse: (response) => {
+ // 记录响应时间
+ console.log(`Response received: ${response.status} ${response.statusText}`);
+
+ // 可以在这里统一处理某些业务逻辑
+ return response;
+ },
+ onResponseError: (error) => {
+ // 统一错误处理
+ if (error.status === 401) {
+ // Token过期,跳转到登录页
+ window.location.href = '/login';
+ }
+
+ console.error('Response error:', error.message);
+ return Promise.reject(error);
+ }
+ };
+
+ // 添加拦截器
+ httpClient.addRequestInterceptor(authInterceptor);
+ httpClient.addResponseInterceptor(responseInterceptor);
+
+ return httpClient;
+}
+
+// 工厂方法使用示例
+export function factoryMethodExample() {
+ // 创建不同环境的客户端实例
+ const devClient = HttpClient.create('https://dev-api.example.com', {
+ timeout: 5000,
+ withCredentials: true
+ });
+
+ const prodClient = HttpClient.create('https://api.example.com', {
+ timeout: 15000,
+ withCredentials: true
+ });
+
+ return { devClient, prodClient };
+}
+
+// 配置管理示例
+export function configManagementExample() {
+ const httpClient = new HttpClient({
+ baseURL: 'https://api.example.com'
+ });
+
+ // 获取当前配置
+ const currentConfig = httpClient.getConfig();
+ console.log('Current config:', currentConfig);
+
+ // 动态更新配置
+ httpClient.updateConfig({
+ timeout: 20000,
+ headers: {
+ 'X-API-Version': 'v2'
+ }
+ });
+
+ // 验证配置更新
+ const updatedConfig = httpClient.getConfig();
+ console.log('Updated config:', updatedConfig);
+
+ return httpClient;
+}
+
+// 实际API调用示例
+export async function apiCallExample() {
+ const httpClient = basicUsageExample();
+
+ try {
+ // GET请求
+ const getUsers = await httpClient.get('/users', {
+ needAuth: true,
+ timeout: 8000
+ });
+ console.log('Users:', getUsers.data);
+
+ // POST请求
+ const createUser = await httpClient.post('/users', {
+ name: 'John Doe',
+ email: 'john@example.com'
+ }, {
+ needAuth: true
+ });
+ console.log('Created user:', createUser.data);
+
+ // PUT请求
+ const updateUser = await httpClient.put('/users/1', {
+ name: 'Jane Doe'
+ });
+ console.log('Updated user:', updateUser.data);
+
+ // DELETE请求
+ const deleteUser = await httpClient.delete('/users/1');
+ console.log('Delete result:', deleteUser.data);
+
+ } catch (error) {
+ if (error instanceof Error) {
+ console.error('API call failed:', error.message);
+ }
+ }
+}
+
+// 错误处理示例
+export function errorHandlingExample() {
+ // 不同类型的错误处理
+ const handleHttpError = (error: any) => {
+ if (error instanceof Error) {
+ if ('status' in error) {
+ // HTTP错误
+ const httpError = error as any;
+ switch (httpError.status) {
+ case 401:
+ console.log('未授权,请重新登录');
+ break;
+ case 403:
+ console.log('禁止访问');
+ break;
+ case 404:
+ console.log('资源不存在');
+ break;
+ case 500:
+ console.log('服务器内部错误');
+ break;
+ default:
+ console.log(`HTTP错误: ${httpError.status} - ${httpError.message}`);
+ }
+ } else {
+ // 网络错误或其他错误
+ console.log('网络错误:', error.message);
+ }
+ }
+ };
+
+ return handleHttpError;
+}
+
+// 完整的实际应用示例
+export class ApiService {
+ private httpClient: HttpClient;
+
+ constructor() {
+ this.httpClient = new HttpClient({
+ baseURL: process.env.API_BASE_URL || 'https://api.example.com',
+ timeout: 15000
+ });
+
+ // 设置全局拦截器
+ this.setupInterceptors();
+ }
+
+ private setupInterceptors() {
+ // 请求拦截器
+ this.httpClient.addRequestInterceptor({
+ onRequest: (options) => {
+ // 添加时间戳防止缓存
+ if (options.method === 'GET') {
+ const separator = options.url.includes('?') ? '&' : '?';
+ options.url += `${separator}_t=${Date.now()}`;
+ }
+ return options;
+ }
+ });
+
+ // 响应拦截器
+ this.httpClient.addResponseInterceptor({
+ onResponse: (response) => {
+ // 统一日志记录
+ console.log(`[${response.status}] ${response.statusText}`);
+ return response;
+ },
+ onResponseError: (error) => {
+ // 统一错误上报
+ console.error('API Error:', {
+ status: error.status,
+ message: error.message,
+ url: window.location.href
+ });
+ return Promise.reject(error);
+ }
+ });
+ }
+
+ // 用户相关API
+ async getUsers(page: number = 1, size: number = 10) {
+ const queryParams = new URLSearchParams({
+ page: page.toString(),
+ size: size.toString()
+ });
+ return this.httpClient.get(`/users?${queryParams}`);
+ }
+
+ async getUserById(id: string) {
+ return this.httpClient.get(`/users/${id}`);
+ }
+
+ async createUser(userData: any) {
+ return this.httpClient.post('/users', userData);
+ }
+
+ async updateUser(id: string, userData: any) {
+ return this.httpClient.put(`/users/${id}`, userData);
+ }
+
+ async deleteUser(id: string) {
+ return this.httpClient.delete(`/users/${id}`);
+ }
+
+ // 认证相关API
+ async login(credentials: { username: string; password: string }) {
+ return this.httpClient.post('/auth/login', credentials, {
+ needAuth: false
+ });
+ }
+
+ async refreshToken(refreshToken: string) {
+ return this.httpClient.post('/auth/refresh', { refreshToken }, {
+ needAuth: false
+ });
+ }
+
+ async logout() {
+ return this.httpClient.post('/auth/logout');
+ }
+}
\ No newline at end of file
diff --git a/sdk/frontend/unified-login-sdk/src/core/http.test.ts b/sdk/frontend/unified-login-sdk/src/core/http.test.ts
new file mode 100644
index 0000000..1ae242b
--- /dev/null
+++ b/sdk/frontend/unified-login-sdk/src/core/http.test.ts
@@ -0,0 +1,136 @@
+/**
+ * HTTP客户端测试文件
+ */
+
+import { HttpClient, HttpError, RequestInterceptor, ResponseInterceptor } from './http';
+import { Storage } from '../utils/storage';
+
+describe('HttpClient', () => {
+ let httpClient: HttpClient;
+ let storage: Storage;
+
+ beforeEach(() => {
+ storage = new Storage('localStorage');
+ httpClient = new HttpClient({
+ baseURL: 'https://api.example.com',
+ timeout: 5000
+ });
+ });
+
+ describe('构造函数', () => {
+ test('应该正确初始化默认配置', () => {
+ const client = new HttpClient();
+ expect(client.getConfig()).toMatchObject({
+ baseURL: '',
+ timeout: 10000,
+ withCredentials: true
+ });
+ });
+
+ test('应该正确合并自定义配置', () => {
+ const config = {
+ baseURL: 'https://test.com',
+ timeout: 3000,
+ withCredentials: false
+ };
+
+ const client = new HttpClient(config);
+ expect(client.getConfig()).toMatchObject(config);
+ });
+ });
+
+ describe('Token管理', () => {
+ test('应该能够设置和获取Token获取函数', () => {
+ const tokenGetter = () => 'test-token';
+ httpClient.setTokenGetter(tokenGetter);
+
+ // 这里需要通过反射或其他方式验证内部状态
+ // 由于是私有属性,我们通过实际请求来间接测试
+ });
+
+ test('应该能够设置租户ID', () => {
+ httpClient.setTenantId('test-tenant');
+ expect(httpClient.getConfig().tenantId).toBe('test-tenant');
+ });
+ });
+
+ describe('拦截器', () => {
+ test('应该能够添加和移除请求拦截器', () => {
+ const interceptor: RequestInterceptor = {
+ onRequest: (options) => {
+ options.headers = { ...options.headers, 'X-Custom': 'test' };
+ return options;
+ }
+ };
+
+ httpClient.addRequestInterceptor(interceptor);
+ // 测试逻辑需要配合实际请求
+
+ httpClient.removeRequestInterceptor(interceptor);
+ });
+
+ test('应该能够添加和移除响应拦截器', () => {
+ const interceptor: ResponseInterceptor = {
+ onResponse: (response) => {
+ return { ...response, data: { ...response.data, intercepted: true } };
+ }
+ };
+
+ httpClient.addResponseInterceptor(interceptor);
+ // 测试逻辑需要配合实际请求
+
+ httpClient.removeResponseInterceptor(interceptor);
+ });
+ });
+
+ describe('静态方法', () => {
+ test('应该能够创建带基础URL的客户端实例', () => {
+ const client = HttpClient.create('https://api.test.com', {
+ timeout: 8000
+ });
+
+ expect(client.getConfig().baseURL).toBe('https://api.test.com');
+ expect(client.getConfig().timeout).toBe(8000);
+ });
+ });
+
+ describe('配置管理', () => {
+ test('应该能够获取和更新配置', () => {
+ const initialConfig = httpClient.getConfig();
+ expect(initialConfig.timeout).toBe(5000);
+
+ httpClient.updateConfig({ timeout: 8000 });
+ const updatedConfig = httpClient.getConfig();
+ expect(updatedConfig.timeout).toBe(8000);
+ });
+ });
+
+ describe('HTTP错误处理', () => {
+ test('HttpError应该正确初始化', () => {
+ const error = new HttpError(
+ 'Test error',
+ 404,
+ 'Not Found',
+ { detail: 'Resource not found' },
+ 'RESOURCE_NOT_FOUND'
+ );
+
+ expect(error.message).toBe('Test error');
+ expect(error.status).toBe(404);
+ expect(error.statusText).toBe('Not Found');
+ expect(error.data).toEqual({ detail: 'Resource not found' });
+ expect(error.code).toBe('RESOURCE_NOT_FOUND');
+ expect(error.name).toBe('HttpError');
+ });
+
+ test('HttpError应该有正确的堆栈跟踪', () => {
+ const error = new HttpError('Test error');
+ expect(error.stack).toBeDefined();
+ });
+ });
+});
+
+describe('工具函数', () => {
+ // 这里可以添加对私有方法的测试(如果需要的话)
+ // 通常通过公共接口间接测试私有逻辑
+});
\ No newline at end of file
diff --git a/sdk/frontend/unified-login-sdk/src/core/http.ts b/sdk/frontend/unified-login-sdk/src/core/http.ts
new file mode 100644
index 0000000..fa76ac0
--- /dev/null
+++ b/sdk/frontend/unified-login-sdk/src/core/http.ts
@@ -0,0 +1,655 @@
+/**
+ * HTTP客户端
+ * 用于与后端API进行通信,支持拦截器、超时控制等功能
+ */
+
+/**
+ * HTTP请求方法类型
+ */
+type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | 'OPTIONS';
+
+/**
+ * HTTP客户端配置
+ */
+export interface HttpClientConfig {
+ /** 基础URL */
+ baseURL?: string;
+ /** 默认请求头 */
+ headers?: Record;
+ /** 超时时间(毫秒) */
+ timeout?: number;
+ /** 是否携带凭证 */
+ withCredentials?: boolean;
+ /** 租户ID */
+ tenantId?: string;
+}
+
+/**
+ * HTTP请求选项
+ */
+export interface HttpRequestOptions {
+ /** 请求方法 */
+ method: HttpMethod;
+ /** 请求URL */
+ url: string;
+ /** 请求头 */
+ headers?: Record;
+ /** 请求体 */
+ body?: any;
+ /** 是否需要认证 */
+ needAuth?: boolean;
+ /** 超时时间 */
+ timeout?: number;
+ /** 是否携带凭证 */
+ withCredentials?: boolean;
+}
+
+/**
+ * HTTP响应类型
+ */
+export interface HttpResponse {
+ /** 状态码 */
+ status: number;
+ /** 状态文本 */
+ statusText: string;
+ /** 响应体 */
+ data: T;
+ /** 响应头 */
+ headers: Record;
+}
+
+/**
+ * 请求拦截器
+ */
+export interface RequestInterceptor {
+ /** 请求前拦截 */
+ onRequest?: (options: HttpRequestOptions) => HttpRequestOptions | Promise;
+ /** 请求错误拦截 */
+ onRequestError?: (error: any) => any;
+}
+
+/**
+ * 响应拦截器
+ */
+export interface ResponseInterceptor {
+ /** 响应后拦截 */
+ onResponse?: (response: HttpResponse) => HttpResponse | Promise>;
+ /** 响应错误拦截 */
+ onResponseError?: (error: HttpError) => any;
+}
+
+/**
+ * HTTP错误类型
+ */
+export class HttpError extends Error {
+ /** 状态码 */
+ public status: number;
+ /** 状态文本 */
+ public statusText: string;
+ /** 错误数据 */
+ public data: any;
+ /** 错误代码 */
+ public code?: string;
+
+ /**
+ * 构造函数
+ * @param message 错误信息
+ * @param status 状态码
+ * @param statusText 状态文本
+ * @param data 错误数据
+ * @param code 错误代码
+ */
+ constructor(
+ message: string,
+ status: number = 0,
+ statusText: string = 'Unknown Error',
+ data: any = null,
+ code?: string
+ ) {
+ super(message);
+ this.name = 'HttpError';
+ this.status = status;
+ this.statusText = statusText;
+ this.data = data;
+ this.code = code;
+
+ // 保持堆栈跟踪
+ if (Error.captureStackTrace) {
+ Error.captureStackTrace(this, HttpError);
+ }
+ }
+}
+
+/**
+ * HTTP客户端类
+ */
+export class HttpClient {
+ private config: Required;
+ private tokenGetter?: () => string | null;
+ private requestInterceptors: RequestInterceptor[] = [];
+ private responseInterceptors: ResponseInterceptor[] = [];
+
+ /**
+ * 构造函数
+ * @param config 客户端配置
+ */
+ constructor(config: HttpClientConfig = {}) {
+ this.config = {
+ baseURL: '',
+ headers: {
+ 'Content-Type': 'application/json'
+ },
+ timeout: 10000,
+ withCredentials: true,
+ tenantId: '',
+ ...config
+ };
+ }
+
+ /**
+ * 设置Token获取函数
+ * @param tokenGetter Token获取函数
+ */
+ setTokenGetter(tokenGetter: () => string | null): void {
+ this.tokenGetter = tokenGetter;
+ }
+
+ /**
+ * 设置租户ID
+ * @param tenantId 租户ID
+ */
+ setTenantId(tenantId?: string): void {
+ this.config.tenantId = tenantId || '';
+ }
+
+ /**
+ * 添加请求拦截器
+ * @param interceptor 请求拦截器
+ */
+ addRequestInterceptor(interceptor: RequestInterceptor): void {
+ this.requestInterceptors.push(interceptor);
+ }
+
+ /**
+ * 添加响应拦截器
+ * @param interceptor 响应拦截器
+ */
+ addResponseInterceptor(interceptor: ResponseInterceptor): void {
+ this.responseInterceptors.push(interceptor);
+ }
+
+ /**
+ * 移除请求拦截器
+ * @param interceptor 要移除的拦截器
+ */
+ removeRequestInterceptor(interceptor: RequestInterceptor): void {
+ const index = this.requestInterceptors.indexOf(interceptor);
+ if (index > -1) {
+ this.requestInterceptors.splice(index, 1);
+ }
+ }
+
+ /**
+ * 移除响应拦截器
+ * @param interceptor 要移除的拦截器
+ */
+ removeResponseInterceptor(interceptor: ResponseInterceptor): void {
+ const index = this.responseInterceptors.indexOf(interceptor);
+ if (index > -1) {
+ this.responseInterceptors.splice(index, 1);
+ }
+ }
+
+ /**
+ * 发送HTTP请求
+ * @param options 请求选项
+ * @returns Promise> 响应结果
+ */
+ async request(options: HttpRequestOptions): Promise> {
+ // 合并配置
+ const mergedOptions = this.mergeOptions(options);
+
+ try {
+ // 执行请求拦截器
+ let processedOptions = await this.executeRequestInterceptors(mergedOptions);
+
+ // 构建完整URL
+ const fullUrl = this.buildFullUrl(processedOptions.url);
+
+ // 构建请求配置
+ const fetchOptions = this.buildFetchOptions(processedOptions);
+
+ // 发送请求(包含超时控制)
+ const response = await this.fetchWithTimeout(
+ fullUrl,
+ fetchOptions,
+ processedOptions.timeout ?? this.config.timeout
+ );
+
+ const responseData = await this.parseResponse(response);
+
+ // 构建响应对象
+ let httpResponse: HttpResponse = {
+ status: response.status,
+ statusText: response.statusText,
+ data: responseData,
+ headers: this.parseHeaders(response.headers)
+ };
+
+ // 处理业务逻辑
+ httpResponse = this.handleBusinessLogic(httpResponse);
+
+ // 执行响应拦截器
+ httpResponse = await this.executeResponseInterceptors(httpResponse);
+
+ return httpResponse;
+
+ } catch (error) {
+ // 执行响应错误拦截器
+ return this.executeResponseErrorInterceptors(error);
+ }
+ }
+
+
+
+ /**
+ * 合并请求选项与默认配置
+ * @param options 请求选项
+ * @returns 合并后的选项
+ */
+ private mergeOptions(options: HttpRequestOptions): HttpRequestOptions {
+ return {
+ method: options.method,
+ url: options.url,
+ headers: {
+ ...this.config.headers,
+ ...options.headers
+ },
+ body: options.body,
+ needAuth: options.needAuth ?? true,
+ timeout: options.timeout ?? this.config.timeout,
+ withCredentials: options.withCredentials ?? this.config.withCredentials
+ };
+ }
+
+ /**
+ * 构建完整URL
+ * @param url 相对URL或绝对URL
+ * @returns 完整URL
+ */
+ private buildFullUrl(url: string): string {
+ if (url.startsWith('http://') || url.startsWith('https://')) {
+ return url;
+ }
+ return this.config.baseURL ? `${this.config.baseURL}${url}` : url;
+ }
+
+ /**
+ * 构建fetch选项
+ * @param options 处理后的请求选项
+ * @returns fetch配置
+ */
+ private buildFetchOptions(options: HttpRequestOptions): RequestInit {
+ const requestHeaders: Record = { ...options.headers };
+
+ // 添加认证头
+ if (options.needAuth && this.tokenGetter) {
+ const token = this.tokenGetter();
+ if (token) {
+ requestHeaders.Authorization = token;
+ }
+ }
+
+ // 添加租户ID头
+ if (this.config.tenantId) {
+ requestHeaders['tenant-id'] = this.config.tenantId;
+ }
+
+ const fetchOptions: RequestInit = {
+ method: options.method,
+ headers: requestHeaders,
+ credentials: options.withCredentials ? 'include' : 'omit'
+ };
+
+ // 添加请求体
+ if (options.body && ['POST', 'PUT', 'PATCH'].includes(options.method)) {
+ fetchOptions.body = typeof options.body === 'string'
+ ? options.body
+ : JSON.stringify(options.body);
+ }
+
+ return fetchOptions;
+ }
+
+ /**
+ * 带超时控制的fetch
+ * @param url 请求URL
+ * @param options fetch选项
+ * @param timeout 超时时间
+ * @returns Promise
+ */
+ private async fetchWithTimeout(
+ url: string,
+ options: RequestInit,
+ timeout: number
+ ): Promise {
+ const controller = new AbortController();
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
+
+ try {
+ const response = await fetch(url, {
+ ...options,
+ signal: controller.signal
+ });
+ clearTimeout(timeoutId);
+ return response;
+ } catch (error) {
+ clearTimeout(timeoutId);
+ if (error instanceof Error && error.name === 'AbortError') {
+ throw new HttpError(
+ `Request timeout after ${timeout}ms`,
+ 408,
+ 'Request Timeout',
+ null,
+ 'TIMEOUT_ERROR'
+ );
+ }
+ throw error;
+ }
+ }
+
+ /**
+ * 处理业务逻辑
+ * @param response 响应对象
+ * @returns 处理后的响应
+ */
+ private handleBusinessLogic(response: HttpResponse): HttpResponse {
+ const { data, status } = response;
+
+ // 检查是否为业务响应结构 { code, msg, data }
+ if (this.isBusinessResponse(data)) {
+ const { code, msg, data: businessData } = data;
+
+ // 检查业务状态码
+ if (code !== 0 && code !== 200 && code !== '0' && code !== '200') {
+ // 业务错误
+ throw new HttpError(
+ msg || `Business Error: ${code}`,
+ status,
+ response.statusText,
+ data,
+ `BUSINESS_ERROR_${code}`
+ );
+ }
+
+ // 业务成功,返回data字段
+ return {
+ ...response,
+ data: businessData as T
+ };
+ }
+
+ return response;
+ }
+
+ /**
+ * 检查是否为业务响应结构
+ * @param data 响应数据
+ * @returns boolean 是否为业务响应结构
+ */
+ private isBusinessResponse(data: any): data is { code: any; msg: string; data: any } {
+ return (
+ typeof data === 'object' &&
+ data !== null &&
+ ('code' in data) &&
+ ('msg' in data) &&
+ ('data' in data)
+ );
+ }
+
+ /**
+ * 执行请求拦截器
+ * @param options 请求选项
+ * @returns 处理后的请求选项
+ */
+ private async executeRequestInterceptors(options: HttpRequestOptions): Promise {
+ let processedOptions = options;
+
+ for (const interceptor of this.requestInterceptors) {
+ try {
+ if (interceptor.onRequest) {
+ processedOptions = await interceptor.onRequest(processedOptions);
+ }
+ } catch (error) {
+ if (interceptor.onRequestError) {
+ interceptor.onRequestError(error);
+ }
+ throw error;
+ }
+ }
+
+ return processedOptions;
+ }
+
+ /**
+ * 执行响应拦截器
+ * @param response 响应对象
+ * @returns 处理后的响应对象
+ */
+ private async executeResponseInterceptors(response: HttpResponse): Promise> {
+ let processedResponse = response;
+
+ for (const interceptor of this.responseInterceptors) {
+ try {
+ if (interceptor.onResponse) {
+ processedResponse = await interceptor.onResponse(processedResponse);
+ }
+ } catch (error) {
+ if (interceptor.onResponseError) {
+ return interceptor.onResponseError(error as HttpError);
+ }
+ throw error;
+ }
+ }
+
+ return processedResponse;
+ }
+
+ /**
+ * 执行响应错误拦截器
+ * @param error 错误对象
+ * @returns Promise
+ */
+ private executeResponseErrorInterceptors(error: any): never {
+ let processedError = error;
+
+ for (const interceptor of this.responseInterceptors) {
+ if (interceptor.onResponseError) {
+ try {
+ processedError = interceptor.onResponseError(processedError);
+ } catch (interceptorError) {
+ processedError = interceptorError;
+ }
+ }
+ }
+
+ if (processedError instanceof HttpError) {
+ throw processedError;
+ }
+
+ // 转换为HttpError
+ throw new HttpError(
+ processedError instanceof Error ? processedError.message : 'Unknown Error',
+ 0,
+ 'Unknown Error',
+ null,
+ 'UNKNOWN_ERROR'
+ );
+ }
+
+ /**
+ * HEAD请求
+ * @param url 请求URL
+ * @param options 请求选项
+ * @returns Promise> 响应结果
+ */
+ async head(url: string, options?: Omit): Promise> {
+ return this.request({
+ method: 'HEAD',
+ url,
+ ...options
+ });
+ }
+
+ /**
+ * OPTIONS请求
+ * @param url 请求URL
+ * @param options 请求选项
+ * @returns Promise> 响应结果
+ */
+ async options(url: string, options?: Omit): Promise> {
+ return this.request({
+ method: 'OPTIONS',
+ url,
+ ...options
+ });
+ }
+
+ /**
+ * GET请求
+ * @param url 请求URL
+ * @param options 请求选项
+ * @returns Promise> 响应结果
+ */
+ async get(url: string, options?: Omit): Promise> {
+ return this.request({
+ method: 'GET',
+ url,
+ ...options
+ });
+ }
+
+ /**
+ * POST请求
+ * @param url 请求URL
+ * @param body 请求体
+ * @param options 请求选项
+ * @returns Promise> 响应结果
+ */
+ async post(url: string, body?: any, options?: Omit): Promise> {
+ return this.request({
+ method: 'POST',
+ url,
+ body,
+ ...options
+ });
+ }
+
+ /**
+ * PUT请求
+ * @param url 请求URL
+ * @param body 请求体
+ * @param options 请求选项
+ * @returns Promise> 响应结果
+ */
+ async put(url: string, body?: any, options?: Omit): Promise> {
+ return this.request({
+ method: 'PUT',
+ url,
+ body,
+ ...options
+ });
+ }
+
+ /**
+ * DELETE请求
+ * @param url 请求URL
+ * @param options 请求选项
+ * @returns Promise> 响应结果
+ */
+ async delete(url: string, options?: Omit): Promise> {
+ return this.request({
+ method: 'DELETE',
+ url,
+ ...options
+ });
+ }
+
+ /**
+ * PATCH请求
+ * @param url 请求URL
+ * @param body 请求体
+ * @param options 请求选项
+ * @returns Promise> 响应结果
+ */
+ async patch(url: string, body?: any, options?: Omit): Promise> {
+ return this.request({
+ method: 'PATCH',
+ url,
+ body,
+ ...options
+ });
+ }
+
+ /**
+ * 创建带基础URL的客户端实例
+ * @param baseURL 基础URL
+ * @param config 其他配置
+ * @returns HttpClient 新的客户端实例
+ */
+ static create(baseURL: string, config?: Omit): HttpClient {
+ return new HttpClient({
+ baseURL,
+ ...config
+ });
+ }
+
+ /**
+ * 获取当前配置
+ * @returns HttpClientConfig 当前配置
+ */
+ getConfig(): HttpClientConfig {
+ return { ...this.config };
+ }
+
+ /**
+ * 更新配置
+ * @param config 新的配置
+ */
+ updateConfig(config: Partial): void {
+ this.config = {
+ ...this.config,
+ ...config
+ };
+ }
+
+ /**
+ * 解析响应体
+ * @param response 响应对象
+ * @returns Promise 解析后的响应体
+ */
+ private async parseResponse(response: Response): Promise {
+ const contentType = response.headers.get('content-type') || '';
+
+ if (contentType.includes('application/json')) {
+ return response.json();
+ } else if (contentType.includes('text/')) {
+ return response.text();
+ } else {
+ return response.blob();
+ }
+ }
+
+ /**
+ * 解析响应头
+ * @param headers 响应头对象
+ * @returns Record 解析后的响应头
+ */
+ private parseHeaders(headers: Headers): Record {
+ const result: Record = {};
+ headers.forEach((value, key) => {
+ result[key] = value;
+ });
+ return result;
+ }
+}
diff --git a/sdk/frontend/unified-login-sdk/src/core/token.ts b/sdk/frontend/unified-login-sdk/src/core/token.ts
new file mode 100644
index 0000000..d59eaf5
--- /dev/null
+++ b/sdk/frontend/unified-login-sdk/src/core/token.ts
@@ -0,0 +1,92 @@
+/**
+ * Token管理模块
+ * 负责Token的存储、获取、刷新和过期处理
+ */
+
+import { Storage } from '../utils/storage';
+
+/**
+ * Token存储键名常量
+ */
+const TOKEN_KEY_PREFIX = 'token_';
+
+/**
+ * Token管理类
+ * 提供Token的增删改查功能
+ */
+export class TokenManager {
+ private readonly storage: Storage;
+ private readonly tokenKey: string;
+ private readonly fullTokenKey: string;
+
+ /**
+ * 构造函数
+ * @param storage 存储实例
+ * @param clientId 客户端ID,用于生成唯一的Token键名
+ */
+ constructor(storage: Storage, clientId: string) {
+ if (!storage) {
+ throw new Error('Storage instance is required');
+ }
+
+ if (!clientId || typeof clientId !== 'string') {
+ throw new Error('Client ID must be a non-empty string');
+ }
+
+ this.storage = storage;
+ this.tokenKey = clientId;
+ this.fullTokenKey = `${TOKEN_KEY_PREFIX}${clientId}`;
+ }
+
+ /**
+ * 存储Token信息
+ * @param token Token字符串
+ * @throws {Error} 当token为空或非字符串时抛出错误
+ */
+ saveToken(token: string): void {
+ if (!token) {
+ throw new Error('Token must be a non-empty string');
+ }
+
+ this.storage.set(this.fullTokenKey, token);
+ }
+
+ /**
+ * 获取Token信息
+ * @returns string | null 返回Token字符串或null
+ */
+ getToken(): string | null {
+ return this.storage.get(this.fullTokenKey);
+ }
+
+ /**
+ * 清除Token信息
+ */
+ clearToken(): void {
+ this.storage.remove(this.fullTokenKey);
+ }
+
+ /**
+ * 检查Token是否存在
+ * @returns boolean Token是否存在
+ */
+ hasToken(): boolean {
+ return this.getToken() !== null;
+ }
+
+ /**
+ * 获取客户端ID
+ * @returns string 客户端ID
+ */
+ getClientId(): string {
+ return this.tokenKey;
+ }
+
+ /**
+ * 获取完整的Token键名
+ * @returns string 完整的Token键名
+ */
+ getFullTokenKey(): string {
+ return this.fullTokenKey;
+ }
+}
diff --git a/sdk/frontend/unified-login-sdk/src/guards/router.examples.ts b/sdk/frontend/unified-login-sdk/src/guards/router.examples.ts
new file mode 100644
index 0000000..110884f
--- /dev/null
+++ b/sdk/frontend/unified-login-sdk/src/guards/router.examples.ts
@@ -0,0 +1,281 @@
+/**
+ * 路由守卫使用示例
+ */
+
+import { RouterGuard, RouterGuardOptions } from './router';
+import { Auth } from '../core/auth';
+import { Storage } from '../utils/storage';
+
+// 基础使用示例
+export function basicUsageExample() {
+ // 创建存储实例
+ const storage = new Storage('localStorage');
+
+ // 创建认证实例
+ const auth = new Auth(storage);
+
+ // 初始化认证配置
+ auth.init({
+ clientId: 'your-client-id',
+ basepath: 'https://api.example.com',
+ homePage: '/dashboard',
+ idpLogoutUrl: 'https://idp.example.com/logout'
+ } as any);
+
+ // 创建路由守卫
+ const routerGuard = new RouterGuard(auth);
+
+ return routerGuard;
+}
+
+// Vue路由配置示例
+export function vueRouterConfigExample() {
+ // 在Vue项目中的路由配置
+ const routes = [
+ {
+ path: '/',
+ name: 'Home',
+ component: 'HomeView', // 示例组件名
+ meta: {
+ auth: {
+ requiresAuth: false // 首页不需要认证
+ }
+ }
+ },
+ {
+ path: '/dashboard',
+ name: 'Dashboard',
+ component: 'DashboardView', // 示例组件名
+ meta: {
+ auth: {
+ requiresAuth: true, // 需要登录
+ redirectUri: '/login' // 登录页面
+ }
+ }
+ },
+ {
+ path: '/admin',
+ name: 'Admin',
+ component: 'AdminView', // 示例组件名
+ meta: {
+ auth: {
+ requiresAuth: true,
+ requiredPermissions: ['admin:access'], // 需要管理员权限
+ unauthorizedRedirectUri: '/unauthorized' // 权限不足跳转页面
+ }
+ }
+ },
+ {
+ path: '/user-management',
+ name: 'UserManagement',
+ component: 'UserManagementView', // 示例组件名
+ meta: {
+ auth: {
+ requiresAuth: true,
+ requiredPermissions: ['user:read', 'user:write'], // 需要多个权限
+ requireAllPermissions: true, // 需要所有权限
+ requiredRoles: ['admin'], // 需要管理员角色
+ requireAllRoles: true // 需要所有角色
+ }
+ }
+ },
+ {
+ path: '/profile',
+ name: 'Profile',
+ component: 'ProfileView', // 示例组件名
+ meta: {
+ auth: {
+ requiresAuth: true,
+ requiredPermissions: ['profile:view', 'profile:edit'], // 多个权限
+ requireAllPermissions: false // 任一权限即可
+ }
+ }
+ }
+ ];
+
+ return routes;
+}
+
+// Vue路由守卫集成示例
+export function vueRouterIntegrationExample() {
+ // 创建路由守卫实例
+ const storage = new Storage('localStorage');
+ const auth = new Auth(storage);
+ const routerGuard = new RouterGuard(auth);
+
+ // Vue Router 3.x 配置
+ const routerConfigV3 = {
+ routes: vueRouterConfigExample(),
+ beforeEach: routerGuard.createVueGuard()
+ };
+
+ // Vue Router 4.x 配置
+ const routerConfigV4 = {
+ routes: vueRouterConfigExample(),
+ beforeEnter: routerGuard.createVueGuard()
+ };
+
+ return { routerConfigV3, routerConfigV4 };
+}
+
+// 手动权限检查示例
+export async function manualPermissionCheckExample(routerGuard: RouterGuard) {
+ try {
+ // 检查单个权限
+ const hasReadPermission = await routerGuard.hasPermission('user:read');
+ console.log('Has read permission:', hasReadPermission);
+
+ // 检查多个权限(需要全部)
+ const hasAllPermissions = await routerGuard.hasPermission(
+ ['user:read', 'user:write'],
+ true
+ );
+ console.log('Has all permissions:', hasAllPermissions);
+
+ // 检查多个权限(需要任一)
+ const hasAnyPermission = await routerGuard.hasPermission(
+ ['user:read', 'admin:access'],
+ false
+ );
+ console.log('Has any permission:', hasAnyPermission);
+
+ // 检查角色
+ const hasAdminRole = await routerGuard.hasRole('admin');
+ console.log('Has admin role:', hasAdminRole);
+
+ // 获取当前用户
+ const currentUser = routerGuard.getCurrentUser();
+ console.log('Current user:', currentUser);
+
+ } catch (error) {
+ console.error('Permission check failed:', error);
+ }
+}
+
+// 高级配置示例
+export function advancedConfigurationExample() {
+ const storage = new Storage('localStorage');
+ const auth = new Auth(storage);
+ const routerGuard = new RouterGuard(auth);
+
+ // 自定义路由守卫选项
+ const customGuardOptions: RouterGuardOptions = {
+ requiresAuth: true,
+ requiredPermissions: ['custom:permission'],
+ requiredRoles: ['custom:role'],
+ requireAllPermissions: true,
+ requireAllRoles: false,
+ redirectUri: '/custom-login',
+ unauthorizedRedirectUri: '/custom-forbidden'
+ };
+
+ return { routerGuard, customGuardOptions };
+}
+
+// 错误处理示例
+export async function errorHandlingExample(routerGuard: RouterGuard) {
+ try {
+ // 执行权限检查
+ const result = await routerGuard.check({
+ requiresAuth: true,
+ requiredPermissions: ['some:permission']
+ });
+
+ if (!result.allowed) {
+ switch (result.reason) {
+ case 'NOT_AUTHENTICATED':
+ console.log('用户未认证,将跳转到登录页');
+ break;
+ case 'INSUFFICIENT_PERMISSIONS':
+ console.log('权限不足:', result.details);
+ break;
+ case 'INSUFFICIENT_ROLES':
+ console.log('角色不足:', result.details);
+ break;
+ default:
+ console.log('访问被拒绝');
+ }
+ }
+ } catch (error) {
+ console.error('路由守卫检查出错:', error);
+ }
+}
+
+// 实际应用示例 - 完整的Vue组件集成
+export class SecureRouteManager {
+ private routerGuard: RouterGuard;
+ private auth: Auth;
+
+ constructor() {
+ const storage = new Storage('localStorage');
+ this.auth = new Auth(storage);
+ this.routerGuard = new RouterGuard(this.auth);
+ }
+
+ // 初始化SDK
+ initializeSDK(config: any) {
+ this.auth.init(config);
+ }
+
+ // 获取Vue路由守卫
+ getVueRouterGuard() {
+ return this.routerGuard.createVueGuard();
+ }
+
+ // 手动检查路由权限
+ async checkRouteAccess(routeMeta: any) {
+ const options: RouterGuardOptions = routeMeta?.auth || {};
+ return await this.routerGuard.check(options);
+ }
+
+ // 检查特定权限
+ async checkSpecificPermission(permission: string) {
+ return await this.routerGuard.hasPermission(permission);
+ }
+
+ // 检查特定角色
+ async checkSpecificRole(role: string) {
+ return await this.routerGuard.hasRole(role);
+ }
+
+ // 获取当前用户信息
+ getCurrentUser() {
+ return this.routerGuard.getCurrentUser();
+ }
+
+ // 处理认证状态变化
+ setupAuthListeners() {
+ // 监听登录事件
+ this.auth.on('login', () => {
+ console.log('用户已登录');
+ // 可以在这里刷新路由权限等
+ });
+
+ // 监听登出事件
+ this.auth.on('logout', () => {
+ console.log('用户已登出');
+ // 可以在这里清理相关状态
+ });
+ }
+}
+
+// 使用示例
+export function usageDemo() {
+ // 1. 基础使用
+ const routerGuard = basicUsageExample();
+
+ // 2. 手动权限检查
+ manualPermissionCheckExample(routerGuard);
+
+ // 3. 获取路由配置
+ const routes = vueRouterConfigExample();
+ console.log('路由配置:', routes);
+
+ // 4. 创建安全路由管理器
+ const secureManager = new SecureRouteManager();
+
+ // 5. 设置监听器
+ secureManager.setupAuthListeners();
+
+ return { routerGuard, secureManager };
+}
\ No newline at end of file
diff --git a/sdk/frontend/unified-login-sdk/src/guards/router.test.ts b/sdk/frontend/unified-login-sdk/src/guards/router.test.ts
new file mode 100644
index 0000000..3f36382
--- /dev/null
+++ b/sdk/frontend/unified-login-sdk/src/guards/router.test.ts
@@ -0,0 +1,358 @@
+/**
+ * 路由守卫测试文件
+ */
+
+import { RouterGuard, RouterGuardOptions } from './router';
+import { Auth } from '../core/auth';
+import { Storage } from '../utils/storage';
+
+// Mock Auth类
+class MockAuth {
+ private _isAuthenticated = false;
+ private _userInfo: any = null;
+
+ isAuthenticated(): boolean {
+ return this._isAuthenticated;
+ }
+
+ setAuthenticated(authenticated: boolean): void {
+ this._isAuthenticated = authenticated;
+ }
+
+ getUserInfo(): any {
+ return this._userInfo;
+ }
+
+ setUserInfo(userInfo: any): void {
+ this._userInfo = userInfo;
+ }
+
+ async login(redirectUri?: string): Promise {
+ // Mock login implementation
+ console.log('Mock login called with redirectUri:', redirectUri);
+ }
+
+ async hasPermission(permission: string | string[]): Promise {
+ if (!this._isAuthenticated || !this._userInfo) return false;
+ const permissions = Array.isArray(permission) ? permission : [permission];
+ const userPermissions = this._userInfo.permissions || [];
+ return permissions.some(p => userPermissions.includes(p));
+ }
+
+ async hasAllPermissions(permissions: string[]): Promise {
+ if (!this._isAuthenticated || !this._userInfo) return false;
+ const userPermissions = this._userInfo.permissions || [];
+ return permissions.every(p => userPermissions.includes(p));
+ }
+
+ async hasRole(role: string | string[]): Promise {
+ if (!this._isAuthenticated || !this._userInfo) return false;
+ const roles = Array.isArray(role) ? role : [role];
+ const userRoles = this._userInfo.roles || [];
+ return roles.some(r => userRoles.includes(r));
+ }
+
+ async hasAllRoles(roles: string[]): Promise {
+ if (!this._isAuthenticated || !this._userInfo) return false;
+ const userRoles = this._userInfo.roles || [];
+ return roles.every(r => userRoles.includes(r));
+ }
+}
+
+describe('RouterGuard', () => {
+ let routerGuard: RouterGuard;
+ let mockAuth: MockAuth;
+ let storage: Storage;
+
+ beforeEach(() => {
+ storage = new Storage('localStorage');
+ mockAuth = new MockAuth() as any;
+ routerGuard = new RouterGuard(mockAuth as unknown as Auth);
+ });
+
+ describe('构造函数', () => {
+ test('应该正确初始化', () => {
+ expect(routerGuard).toBeInstanceOf(RouterGuard);
+ });
+
+ test('应该在没有Auth实例时抛出错误', () => {
+ expect(() => new RouterGuard(null as any)).toThrow('Auth instance is required');
+ });
+ });
+
+ describe('权限检查', () => {
+ test('应该允许不需要认证的路由', async () => {
+ const options: RouterGuardOptions = {
+ requiresAuth: false
+ };
+
+ const result = await routerGuard.check(options);
+ expect(result.allowed).toBe(true);
+ expect(result.reason).toBeUndefined();
+ });
+
+ test('应该拒绝未认证用户的访问', async () => {
+ const options: RouterGuardOptions = {
+ requiresAuth: true
+ };
+
+ const result = await routerGuard.check(options);
+ expect(result.allowed).toBe(false);
+ expect(result.reason).toBe('NOT_AUTHENTICATED');
+ });
+
+ test('应该允许已认证用户的访问', async () => {
+ // 设置用户为已认证状态
+ mockAuth.setAuthenticated(true);
+ mockAuth.setUserInfo({
+ permissions: ['read:user'],
+ roles: ['user']
+ });
+
+ const options: RouterGuardOptions = {
+ requiresAuth: true
+ };
+
+ const result = await routerGuard.check(options);
+ expect(result.allowed).toBe(true);
+ });
+
+ test('应该检查单个权限', async () => {
+ mockAuth.setAuthenticated(true);
+ mockAuth.setUserInfo({
+ permissions: ['read:user', 'write:user'],
+ roles: ['user']
+ });
+
+ const options: RouterGuardOptions = {
+ requiresAuth: true,
+ requiredPermissions: ['read:user']
+ };
+
+ const result = await routerGuard.check(options);
+ expect(result.allowed).toBe(true);
+ });
+
+ test('应该拒绝缺少权限的访问', async () => {
+ mockAuth.setAuthenticated(true);
+ mockAuth.setUserInfo({
+ permissions: ['read:user'],
+ roles: ['user']
+ });
+
+ const options: RouterGuardOptions = {
+ requiresAuth: true,
+ requiredPermissions: ['write:user']
+ };
+
+ const result = await routerGuard.check(options);
+ expect(result.allowed).toBe(false);
+ expect(result.reason).toBe('INSUFFICIENT_PERMISSIONS');
+ });
+
+ test('应该检查多个权限(需要全部)', async () => {
+ mockAuth.setAuthenticated(true);
+ mockAuth.setUserInfo({
+ permissions: ['read:user', 'write:user', 'delete:user'],
+ roles: ['admin']
+ });
+
+ const options: RouterGuardOptions = {
+ requiresAuth: true,
+ requiredPermissions: ['read:user', 'write:user'],
+ requireAllPermissions: true
+ };
+
+ const result = await routerGuard.check(options);
+ expect(result.allowed).toBe(true);
+ });
+
+ test('应该检查多个权限(需要任一)', async () => {
+ mockAuth.setAuthenticated(true);
+ mockAuth.setUserInfo({
+ permissions: ['read:user'],
+ roles: ['user']
+ });
+
+ const options: RouterGuardOptions = {
+ requiresAuth: true,
+ requiredPermissions: ['read:user', 'write:user'],
+ requireAllPermissions: false
+ };
+
+ const result = await routerGuard.check(options);
+ expect(result.allowed).toBe(true);
+ });
+
+ test('应该检查角色', async () => {
+ mockAuth.setAuthenticated(true);
+ mockAuth.setUserInfo({
+ permissions: ['read:user'],
+ roles: ['admin', 'user']
+ });
+
+ const options: RouterGuardOptions = {
+ requiresAuth: true,
+ requiredRoles: ['admin']
+ };
+
+ const result = await routerGuard.check(options);
+ expect(result.allowed).toBe(true);
+ });
+
+ test('应该拒绝缺少角色的访问', async () => {
+ mockAuth.setAuthenticated(true);
+ mockAuth.setUserInfo({
+ permissions: ['read:user'],
+ roles: ['user']
+ });
+
+ const options: RouterGuardOptions = {
+ requiresAuth: true,
+ requiredRoles: ['admin']
+ };
+
+ const result = await routerGuard.check(options);
+ expect(result.allowed).toBe(false);
+ expect(result.reason).toBe('INSUFFICIENT_ROLES');
+ });
+ });
+
+ describe('hasPermission方法', () => {
+ beforeEach(() => {
+ mockAuth.setAuthenticated(true);
+ mockAuth.setUserInfo({
+ permissions: ['read:user', 'write:user'],
+ roles: ['user']
+ });
+ });
+
+ test('应该检查单个权限', async () => {
+ const result = await routerGuard.hasPermission('read:user');
+ expect(result).toBe(true);
+ });
+
+ test('应该检查多个权限(需要全部)', async () => {
+ const result = await routerGuard.hasPermission(['read:user', 'write:user'], true);
+ expect(result).toBe(true);
+ });
+
+ test('应该检查多个权限(需要任一)', async () => {
+ const result = await routerGuard.hasPermission(['read:user', 'delete:user'], false);
+ expect(result).toBe(true);
+ });
+
+ test('应该在未认证时返回false', async () => {
+ mockAuth.setAuthenticated(false);
+ const result = await routerGuard.hasPermission('read:user');
+ expect(result).toBe(false);
+ });
+
+ test('应该在空权限时返回true', async () => {
+ const result = await routerGuard.hasPermission([]);
+ expect(result).toBe(true);
+ });
+
+ test('应该在无权限参数时返回true', async () => {
+ const result = await routerGuard.hasPermission(null as any);
+ expect(result).toBe(true);
+ });
+ });
+
+ describe('hasRole方法', () => {
+ beforeEach(() => {
+ mockAuth.setAuthenticated(true);
+ mockAuth.setUserInfo({
+ permissions: ['read:user'],
+ roles: ['admin', 'user']
+ });
+ });
+
+ test('应该检查单个角色', async () => {
+ const result = await routerGuard.hasRole('admin');
+ expect(result).toBe(true);
+ });
+
+ test('应该检查多个角色(需要全部)', async () => {
+ const result = await routerGuard.hasRole(['admin', 'user'], true);
+ expect(result).toBe(true);
+ });
+
+ test('应该检查多个角色(需要任一)', async () => {
+ const result = await routerGuard.hasRole(['admin', 'superuser'], false);
+ expect(result).toBe(true);
+ });
+
+ test('应该在未认证时返回false', async () => {
+ mockAuth.setAuthenticated(false);
+ const result = await routerGuard.hasRole('admin');
+ expect(result).toBe(false);
+ });
+ });
+
+ describe('getCurrentUser方法', () => {
+ test('应该返回当前用户信息', () => {
+ const userInfo = { userId: '1', username: 'test' };
+ mockAuth.setUserInfo(userInfo);
+
+ const result = routerGuard.getCurrentUser();
+ expect(result).toEqual(userInfo);
+ });
+
+ test('应该在获取用户信息失败时返回null', () => {
+ // Mock getUserInfo 抛出异常
+ jest.spyOn(mockAuth, 'getUserInfo').mockImplementation(() => {
+ throw new Error('Failed to get user info');
+ });
+
+ const result = routerGuard.getCurrentUser();
+ expect(result).toBeNull();
+ });
+ });
+
+ describe('Vue路由守卫', () => {
+ test('应该创建有效的路由守卫函数', () => {
+ const guard = routerGuard.createVueGuard();
+ expect(typeof guard).toBe('function');
+ });
+
+ test('应该正确处理允许的路由', async () => {
+ mockAuth.setAuthenticated(true);
+ mockAuth.setUserInfo({
+ permissions: ['read:user'],
+ roles: ['user']
+ });
+
+ const guard = routerGuard.createVueGuard();
+ const to = { meta: { auth: { requiresAuth: true } } };
+ const from = {};
+ const next = jest.fn();
+
+ await guard(to as any, from as any, next);
+ expect(next).toHaveBeenCalledWith();
+ });
+
+ test('应该正确处理拒绝的路由', async () => {
+ const guard = routerGuard.createVueGuard();
+ const to = { meta: { auth: { requiresAuth: true } } };
+ const from = {};
+ const next = jest.fn();
+
+ await guard(to as any, from as any, next);
+ expect(next).toHaveBeenCalledWith(false);
+ });
+
+ test('应该处理路由守卫错误', async () => {
+ // Mock check 方法抛出异常
+ jest.spyOn(routerGuard, 'check').mockRejectedValue(new Error('Test error'));
+
+ const guard = routerGuard.createVueGuard();
+ const to = { meta: { auth: {} } };
+ const from = {};
+ const next = jest.fn();
+
+ await guard(to as any, from as any, next);
+ expect(next).toHaveBeenCalledWith(false);
+ });
+ });
+});
\ No newline at end of file
diff --git a/sdk/frontend/unified-login-sdk/src/guards/router.ts b/sdk/frontend/unified-login-sdk/src/guards/router.ts
new file mode 100644
index 0000000..9337123
--- /dev/null
+++ b/sdk/frontend/unified-login-sdk/src/guards/router.ts
@@ -0,0 +1,311 @@
+/**
+ * 路由守卫模块
+ * 提供基于权限的路由拦截和未登录自动跳转登录页功能
+ */
+
+import { Auth } from '../core/auth';
+import { UserInfo } from '../types';
+
+/**
+ * 路由守卫选项
+ */
+export interface RouterGuardOptions {
+ /**
+ * 是否需要登录
+ * @default true
+ */
+ requiresAuth?: boolean;
+ /**
+ * 需要的权限列表
+ */
+ requiredPermissions?: string[];
+ /**
+ * 需要的角色列表
+ */
+ requiredRoles?: string[];
+ /**
+ * 登录后重定向的URL
+ */
+ redirectUri?: string;
+ /**
+ * 权限不足时重定向的URL
+ */
+ unauthorizedRedirectUri?: string;
+ /**
+ * 是否需要所有权限(true)还是任一权限(false)
+ * @default true
+ */
+ requireAllPermissions?: boolean;
+ /**
+ * 是否需要所有角色(true)还是任一角色(false)
+ * @default true
+ */
+ requireAllRoles?: boolean;
+}
+
+/**
+ * 路由守卫检查结果
+ */
+export interface GuardCheckResult {
+ /** 是否允许访问 */
+ allowed: boolean;
+ /** 拒绝原因 */
+ reason?: 'NOT_AUTHENTICATED' | 'INSUFFICIENT_PERMISSIONS' | 'INSUFFICIENT_ROLES';
+ /** 详细信息 */
+ details?: string;
+}
+
+/**
+ * Vue路由守卫函数类型
+ */
+type VueRouteGuard = (to: any, from: any, next: any) => Promise;
+
+/**
+ * 路由守卫类
+ */
+export class RouterGuard {
+ private readonly auth: Auth;
+
+ /**
+ * 构造函数
+ * @param auth 认证实例
+ */
+ constructor(auth: Auth) {
+ if (!auth) {
+ throw new Error('Auth instance is required');
+ }
+ this.auth = auth;
+ }
+
+ /**
+ * 检查路由权限
+ * @param options 路由守卫选项
+ * @returns Promise 权限检查结果
+ */
+ async check(options: RouterGuardOptions): Promise {
+ const {
+ requiresAuth = true,
+ requiredPermissions = [],
+ requiredRoles = [],
+ requireAllPermissions = true,
+ requireAllRoles = true
+ } = options;
+
+ // 如果不需要认证,直接允许
+ if (!requiresAuth) {
+ return { allowed: true };
+ }
+
+ // 检查是否已认证
+ if (!this.auth.isAuthenticated()) {
+ // 未认证,触发登录流程
+ try {
+ await this.auth.login(options.redirectUri);
+ } catch (error) {
+ console.error('Failed to initiate login:', error);
+ }
+ return {
+ allowed: false,
+ reason: 'NOT_AUTHENTICATED',
+ details: 'User is not authenticated'
+ };
+ }
+
+ // 检查权限
+ if (requiredPermissions.length > 0) {
+ const hasPermission = await this.checkPermissions(
+ requiredPermissions,
+ requireAllPermissions
+ );
+
+ if (!hasPermission) {
+ this.handleUnauthorizedAccess(options.unauthorizedRedirectUri);
+ return {
+ allowed: false,
+ reason: 'INSUFFICIENT_PERMISSIONS',
+ details: `Missing required permissions: ${requiredPermissions.join(', ')}`
+ };
+ }
+ }
+
+ // 检查角色
+ if (requiredRoles.length > 0) {
+ const hasRole = await this.checkRoles(requiredRoles, requireAllRoles);
+
+ if (!hasRole) {
+ this.handleUnauthorizedAccess(options.unauthorizedRedirectUri);
+ return {
+ allowed: false,
+ reason: 'INSUFFICIENT_ROLES',
+ details: `Missing required roles: ${requiredRoles.join(', ')}`
+ };
+ }
+ }
+
+ return { allowed: true };
+ }
+
+ /**
+ * 创建Vue路由守卫
+ * @returns Vue路由守卫函数
+ */
+ createVueGuard(): VueRouteGuard {
+ return async (to: any, from: any, next: any) => {
+ try {
+ // 从路由元信息中获取守卫选项
+ const options: RouterGuardOptions = to.meta?.auth || {};
+
+ const result = await this.check(options);
+
+ if (result.allowed) {
+ next();
+ } else {
+ // 根据拒绝原因决定如何处理
+ switch (result.reason) {
+ case 'NOT_AUTHENTICATED':
+ // 登录已经在check方法中处理
+ next(false);
+ break;
+ case 'INSUFFICIENT_PERMISSIONS':
+ case 'INSUFFICIENT_ROLES':
+ // 权限不足已经在check方法中处理
+ next(false);
+ break;
+ default:
+ next(false);
+ }
+ }
+ } catch (error) {
+ console.error('Route guard error:', error);
+ next(false);
+ }
+ };
+ }
+
+ /**
+ * 检查当前用户是否有权限访问资源
+ * @param permissions 需要的权限列表
+ * @param requireAll 是否需要所有权限
+ * @returns Promise 是否拥有权限
+ */
+ async hasPermission(permissions: string | string[], requireAll: boolean = true): Promise {
+ if (!permissions) {
+ return true;
+ }
+
+ const requiredPermissions = Array.isArray(permissions) ? permissions : [permissions];
+
+ if (requiredPermissions.length === 0) {
+ return true;
+ }
+
+ // 检查是否已认证
+ if (!this.auth.isAuthenticated()) {
+ return false;
+ }
+
+ // 使用Auth类的内置权限检查方法
+ try {
+ if (requireAll) {
+ return await this.auth.hasAllPermissions(requiredPermissions);
+ } else {
+ return await this.auth.hasPermission(requiredPermissions);
+ }
+ } catch (error) {
+ console.error('Permission check failed:', error);
+ return false;
+ }
+ }
+
+ /**
+ * 检查当前用户是否有指定角色
+ * @param roles 需要的角色列表
+ * @param requireAll 是否需要所有角色
+ * @returns Promise 是否拥有角色
+ */
+ async hasRole(roles: string | string[], requireAll: boolean = true): Promise {
+ if (!roles) {
+ return true;
+ }
+
+ const requiredRoles = Array.isArray(roles) ? roles : [roles];
+
+ if (requiredRoles.length === 0) {
+ return true;
+ }
+
+ // 检查是否已认证
+ if (!this.auth.isAuthenticated()) {
+ return false;
+ }
+
+ // 使用Auth类的内置角色检查方法
+ try {
+ if (requireAll) {
+ return await this.auth.hasAllRoles(requiredRoles);
+ } else {
+ return await this.auth.hasRole(requiredRoles);
+ }
+ } catch (error) {
+ console.error('Role check failed:', error);
+ return false;
+ }
+ }
+
+ /**
+ * 获取当前用户信息
+ * @returns UserInfo | null 用户信息
+ */
+ async getCurrentUser(): Promise {
+ try {
+ return await this.auth.getUserInfo();
+ } catch (error) {
+ console.error('Failed to get user info:', error);
+ return null;
+ }
+ }
+
+ /**
+ * 检查权限
+ * @private
+ */
+ private async checkPermissions(permissions: string[], requireAll: boolean): Promise {
+ try {
+ return requireAll
+ ? await this.auth.hasAllPermissions(permissions)
+ : await this.auth.hasPermission(permissions);
+ } catch (error) {
+ console.error('Permission validation failed:', error);
+ return false;
+ }
+ }
+
+ /**
+ * 检查角色
+ * @private
+ */
+ private async checkRoles(roles: string[], requireAll: boolean): Promise {
+ try {
+ return requireAll
+ ? await this.auth.hasAllRoles(roles)
+ : await this.auth.hasRole(roles);
+ } catch (error) {
+ console.error('Role validation failed:', error);
+ return false;
+ }
+ }
+
+ /**
+ * 处理未授权访问
+ * @private
+ */
+ private handleUnauthorizedAccess(redirectUri?: string): void {
+ if (redirectUri) {
+ try {
+ window.location.href = redirectUri;
+ } catch (error) {
+ console.error('Failed to redirect to unauthorized page:', error);
+ }
+ }
+ }
+}
diff --git a/sdk/frontend/unified-login-sdk/src/index.ts b/sdk/frontend/unified-login-sdk/src/index.ts
new file mode 100644
index 0000000..3b54cb1
--- /dev/null
+++ b/sdk/frontend/unified-login-sdk/src/index.ts
@@ -0,0 +1,108 @@
+/**
+ * 统一登录SDK入口文件
+ * 支持OAuth2授权码模式,提供完整的认证和权限管理功能
+ */
+
+// 核心功能导出
+export { Auth } from './core/auth';
+export { TokenManager } from './core/token';
+export { HttpClient, HttpError } from './core/http';
+
+// 工具类导出
+export { Storage } from './utils/storage';
+export { RouterGuard, RouterGuardOptions } from './guards/router';
+
+// Vue集成导出
+export { VuePlugin, createVuePlugin, useAuth } from './plugins/vue';
+
+// 工具函数导出
+export {
+ generateRandomString,
+ parseQueryParams,
+ buildQueryParams,
+ generateAuthorizationUrl,
+ isCallbackUrl
+} from './utils/url';
+
+// 类型定义导出
+export type {
+ SDKConfig,
+ UnifiedLoginSDK,
+ UserInfo,
+ RouterInfo,
+ EventType
+} from './types';
+
+// 创建默认SDK实例
+import { SDKConfig, UnifiedLoginSDK } from './types';
+import { Auth } from './core/auth';
+import { Storage } from './utils/storage';
+
+// 全局单例实例
+let defaultSDK: UnifiedLoginSDK | null = null;
+let defaultAuth: Auth | null = null;
+
+/**
+ * 获取默认SDK实例
+ * @returns UnifiedLoginSDK SDK实例
+ */
+function getDefaultSDK(): UnifiedLoginSDK {
+ if (!defaultSDK) {
+ const storage = new Storage();
+ defaultAuth = new Auth(storage);
+
+ defaultSDK = {
+ init: (config: SDKConfig) => defaultAuth!.init(config),
+ getToken: () => defaultAuth!.getToken(),
+ login: (redirectUri?: string) => defaultAuth!.login(redirectUri),
+ logout: () => defaultAuth!.logout(),
+ handleCallback: () => defaultAuth!.handleCallback(),
+ getRoutes: () => defaultAuth!.getRoutes(),
+ getUserInfo: () => defaultAuth!.getUserInfo(),
+ refreshUserInfo: () => defaultAuth!.refreshUserInfo(),
+ isAuthenticated: () => defaultAuth!.isAuthenticated(),
+ hasRole: (role: string | string[]) => defaultAuth!.hasRole(role),
+ hasAllRoles: (roles: string[]) => defaultAuth!.hasAllRoles(roles),
+ hasPermission: (permission: string | string[]) => defaultAuth!.hasPermission(permission),
+ hasAllPermissions: (permissions: string[]) => defaultAuth!.hasAllPermissions(permissions),
+ on: (event, callback) => defaultAuth!.on(event, callback),
+ off: (event, callback) => defaultAuth!.off(event, callback),
+ isCallback: () => defaultAuth!.isCallback()
+ };
+ }
+
+ return defaultSDK!;
+}
+
+/**
+ * 默认导出的SDK实例
+ * 提供最简化的使用方式
+ */
+export const unifiedLoginSDK = getDefaultSDK();
+
+/**
+ * 默认导出
+ */
+export default unifiedLoginSDK;
+
+// 版本信息
+export const VERSION = '1.0.0';
+export const version = VERSION;
+
+// 便捷别名导出
+export {
+ unifiedLoginSDK as sdk,
+ unifiedLoginSDK as auth
+};
+
+// 全局类型声明
+declare global {
+ interface Window {
+ unifiedLoginSDK: typeof unifiedLoginSDK;
+ }
+}
+
+// 如果在浏览器环境中,将SDK挂载到window对象
+if (typeof window !== 'undefined') {
+ window.unifiedLoginSDK = unifiedLoginSDK;
+}
diff --git a/sdk/frontend/unified-login-sdk/src/plugins/vue.test.ts b/sdk/frontend/unified-login-sdk/src/plugins/vue.test.ts
new file mode 100644
index 0000000..2146364
--- /dev/null
+++ b/sdk/frontend/unified-login-sdk/src/plugins/vue.test.ts
@@ -0,0 +1,260 @@
+/**
+ * Vue插件测试文件
+ */
+
+import { VuePlugin, VuePluginOptions, createVuePlugin, useAuth } from './vue';
+import { Storage } from '../utils/storage';
+
+// Mock Storage类
+class MockStorage {
+ private data: Record = {};
+
+ set(key: string, value: any): void {
+ this.data[key] = value;
+ }
+
+ get(key: string): any {
+ return this.data[key];
+ }
+
+ remove(key: string): void {
+ delete this.data[key];
+ }
+}
+
+// Mock Auth类
+class MockAuth {
+ init(config: any): void {
+ console.log('Auth initialized with config:', config);
+ }
+
+ login(): void {
+ console.log('Login called');
+ }
+
+ logout(): void {
+ console.log('Logout called');
+ }
+}
+
+// Mock RouterGuard类
+class MockRouterGuard {
+ createVueGuard() {
+ return (to: any, from: any, next: any) => {
+ console.log('Route guard called');
+ next();
+ };
+ }
+}
+
+// Mock Vue 3 App
+class MockVue3App {
+ config = {
+ globalProperties: {} as Record
+ };
+
+ provide = jest.fn();
+ mixin = jest.fn();
+ use = jest.fn();
+}
+
+// Mock Vue 2 Constructor
+class MockVue2Constructor {
+ static prototype: Record = {};
+ static mixin = jest.fn();
+ static use = jest.fn();
+}
+
+describe('VuePlugin', () => {
+ let storage: Storage;
+ let vuePlugin: VuePlugin;
+
+ beforeEach(() => {
+ storage = new MockStorage() as any;
+ vuePlugin = new VuePlugin(storage);
+ });
+
+ describe('构造函数', () => {
+ test('应该正确初始化', () => {
+ expect(vuePlugin).toBeInstanceOf(VuePlugin);
+ expect(vuePlugin.getAuth()).toBeDefined();
+ expect(vuePlugin.getRouterGuard()).toBeDefined();
+ expect(vuePlugin.getStorage()).toBe(storage);
+ });
+
+ test('应该在没有存储实例时抛出错误', () => {
+ expect(() => new VuePlugin(null as any)).toThrow('Storage instance is required');
+ });
+ });
+
+ describe('install方法', () => {
+ test('应该在没有配置时抛出错误', () => {
+ const app = new MockVue3App();
+ const options: VuePluginOptions = { config: undefined as any };
+
+ expect(() => vuePlugin.install(app as any, options)).toThrow('SDK config is required');
+ });
+
+ test('应该正确安装Vue 3插件', () => {
+ const app = new MockVue3App();
+ const options: VuePluginOptions = {
+ config: { clientId: 'test-client' } as any,
+ pluginName: 'testLogin'
+ };
+
+ vuePlugin.install(app as any, options);
+
+ // 检查全局属性
+ expect(app.config.globalProperties.$testLogin).toBeDefined();
+ expect(app.config.globalProperties.$auth).toBeDefined();
+
+ // 检查provide调用
+ expect(app.provide).toHaveBeenCalledWith('testLogin', expect.anything());
+ expect(app.provide).toHaveBeenCalledWith('auth', expect.anything());
+ });
+
+ test('应该正确安装Vue 2插件', () => {
+ const app = MockVue2Constructor;
+ const options: VuePluginOptions = {
+ config: { clientId: 'test-client' } as any,
+ pluginName: 'testLogin'
+ };
+
+ vuePlugin.install(app as any, options);
+
+ // 检查原型属性
+ expect(app.prototype.$testLogin).toBeDefined();
+ expect(app.prototype.$auth).toBeDefined();
+ });
+
+ test('应该防止重复初始化', () => {
+ const app = new MockVue3App();
+ const options: VuePluginOptions = {
+ config: { clientId: 'test-client' } as any
+ };
+
+ // 第一次安装
+ vuePlugin.install(app as any, options);
+
+ // 第二次安装应该输出警告
+ const consoleWarnSpy = jest.spyOn(console, 'warn').mockImplementation();
+ vuePlugin.install(app as any, options);
+ expect(consoleWarnSpy).toHaveBeenCalledWith('Vue plugin is already initialized');
+ consoleWarnSpy.mockRestore();
+ });
+
+ test('应该支持手动指定Vue版本', () => {
+ const app = new MockVue3App();
+ const options: VuePluginOptions = {
+ config: { clientId: 'test-client' } as any,
+ vueVersion: 'vue2' // 强制使用Vue 2模式
+ };
+
+ const consoleLogSpy = jest.spyOn(console, 'log').mockImplementation();
+ vuePlugin.install(app as any, options);
+ expect(consoleLogSpy).toHaveBeenCalledWith('Unified Login SDK installed successfully (vue2)');
+ consoleLogSpy.mockRestore();
+ });
+ });
+
+ describe('getter方法', () => {
+ test('应该正确返回各个实例', () => {
+ expect(vuePlugin.getAuth()).toBeDefined();
+ expect(vuePlugin.getRouterGuard()).toBeDefined();
+ expect(vuePlugin.getStorage()).toBe(storage);
+ expect(vuePlugin.getSDK()).toBeDefined();
+ });
+ });
+
+ describe('辅助函数', () => {
+ test('createVuePlugin应该创建插件实例', () => {
+ const plugin = createVuePlugin('localStorage', 'test_prefix');
+ expect(plugin).toBeInstanceOf(VuePlugin);
+ expect(plugin.getStorage()).toBeInstanceOf(Storage);
+ });
+
+ test('useAuth应该返回正确的composable对象', () => {
+ const composable = useAuth(vuePlugin);
+
+ expect(composable.auth).toBe(vuePlugin.getAuth());
+ expect(composable.routerGuard).toBe(vuePlugin.getRouterGuard());
+ expect(composable.storage).toBe(vuePlugin.getStorage());
+ expect(composable.sdk).toBe(vuePlugin.getSDK());
+ });
+ });
+
+ describe('路由守卫注册', () => {
+ test('应该在启用时注册路由守卫', () => {
+ const app = new MockVue3App();
+ const options: VuePluginOptions = {
+ config: { clientId: 'test-client' } as any,
+ autoRegisterGuards: true
+ };
+
+ vuePlugin.install(app as any, options);
+ expect(app.mixin).toHaveBeenCalled();
+ });
+
+ test('应该在禁用时不注册路由守卫', () => {
+ const app = new MockVue3App();
+ const options: VuePluginOptions = {
+ config: { clientId: 'test-client' } as any,
+ autoRegisterGuards: false
+ };
+
+ vuePlugin.install(app as any, options);
+ expect(app.mixin).not.toHaveBeenCalled();
+ });
+ });
+
+ describe('Vue版本检测', () => {
+ test('应该正确检测Vue 3', () => {
+ const app = new MockVue3App();
+ const options: VuePluginOptions = {
+ config: { clientId: 'test-client' } as any
+ };
+
+ const consoleLogSpy = jest.spyOn(console, 'log').mockImplementation();
+ vuePlugin.install(app as any, options);
+ expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining('(vue3)'));
+ consoleLogSpy.mockRestore();
+ });
+
+ test('应该正确检测Vue 2', () => {
+ const app = MockVue2Constructor;
+ const options: VuePluginOptions = {
+ config: { clientId: 'test-client' } as any
+ };
+
+ const consoleLogSpy = jest.spyOn(console, 'log').mockImplementation();
+ vuePlugin.install(app as any, options);
+ expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining('(vue2)'));
+ consoleLogSpy.mockRestore();
+ });
+ });
+});
+
+describe('错误处理', () => {
+ test('应该正确处理安装过程中的错误', () => {
+ const storage = new MockStorage() as any;
+ const plugin = new VuePlugin(storage);
+
+ // Mock auth.init 抛出错误
+ const mockAuth = plugin.getAuth();
+ jest.spyOn(mockAuth, 'init').mockImplementation(() => {
+ throw new Error('Init failed');
+ });
+
+ const app = new MockVue3App();
+ const options: VuePluginOptions = {
+ config: { clientId: 'test-client' } as any
+ };
+
+ const consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation();
+
+ expect(() => plugin.install(app as any, options)).toThrow('Init failed');
+ expect(consoleErrorSpy).toHaveBeenCalledWith('Failed to install Vue plugin:', expect.any(Error));
+
+ consoleErrorSpy.mockRestore();
+ });
+});
\ No newline at end of file
diff --git a/sdk/frontend/oauth2-login-sdk/src/plugins/vue.ts b/sdk/frontend/unified-login-sdk/src/plugins/vue.ts
similarity index 62%
rename from sdk/frontend/oauth2-login-sdk/src/plugins/vue.ts
rename to sdk/frontend/unified-login-sdk/src/plugins/vue.ts
index c736792..48287b2 100644
--- a/sdk/frontend/oauth2-login-sdk/src/plugins/vue.ts
+++ b/sdk/frontend/unified-login-sdk/src/plugins/vue.ts
@@ -4,10 +4,15 @@
*/
import { Auth } from '../core/auth';
-import { SDKConfig } from '../types';
+import { SDKConfig, UnifiedLoginSDK } from '../types';
import { Storage } from '../utils/storage';
import { RouterGuard } from '../guards/router';
+/**
+ * Vue版本类型
+ */
+type VueVersion = 'vue2' | 'vue3';
+
/**
* Vue插件选项
*/
@@ -26,14 +31,20 @@ export interface VuePluginOptions {
* Vue插件类
*/
export class VuePlugin {
- private auth: Auth;
- private routerGuard: RouterGuard;
+ private readonly auth: Auth;
+ private readonly routerGuard: RouterGuard;
+ private readonly storage: Storage;
/**
* 构造函数
* @param storage 存储实例
*/
constructor(storage: Storage) {
+ if (!storage) {
+ throw new Error('Storage instance is required');
+ }
+
+ this.storage = storage;
this.auth = new Auth(storage);
this.routerGuard = new RouterGuard(this.auth);
}
@@ -108,14 +119,67 @@ export class VuePlugin {
getRouterGuard(): RouterGuard {
return this.routerGuard;
}
+
+ /**
+ * 获取存储实例
+ * @returns Storage 存储实例
+ */
+ getStorage(): Storage {
+ return this.storage;
+ }
+
+ /**
+ * 获取SDK实例(兼容旧版本)
+ * @returns UnifiedLoginSDK SDK实例
+ */
+ getSDK(): UnifiedLoginSDK {
+ return this.auth as unknown as UnifiedLoginSDK;
+ }
}
/**
* 创建Vue插件实例
* @param storageType 存储类型
+ * @param prefix 存储前缀
* @returns VuePlugin Vue插件实例
*/
-export function createVuePlugin(storageType?: 'localStorage' | 'sessionStorage' | 'cookie'): VuePlugin {
- const storage = new Storage(storageType);
+export function createVuePlugin(
+ storageType?: 'localStorage' | 'sessionStorage' | 'cookie',
+ prefix?: string
+): VuePlugin {
+ const storage = new Storage(storageType, prefix);
return new VuePlugin(storage);
}
+
+/**
+ * 创建Vue 3 Composition API使用的composable函数
+ * @param plugin Vue插件实例
+ * @returns composable函数
+ */
+export function useAuth(plugin: VuePlugin) {
+ return {
+ /** 认证实例 */
+ auth: plugin.getAuth(),
+ /** 路由守卫实例 */
+ routerGuard: plugin.getRouterGuard(),
+ /** 存储实例 */
+ storage: plugin.getStorage(),
+ /** SDK实例 */
+ sdk: plugin.getSDK()
+ };
+}
+
+// 全局类型声明(可根据需要在项目中添加)
+// declare module '@vue/runtime-core' {
+// interface ComponentCustomProperties {
+// $unifiedLogin: Auth;
+// $auth: Auth;
+// }
+// }
+//
+// declare module 'vue/types/vue' {
+// interface Vue {
+// $unifiedLogin: Auth;
+// $auth: Auth;
+// }
+// }
diff --git a/sdk/frontend/oauth2-login-sdk/src/types/config.ts b/sdk/frontend/unified-login-sdk/src/types/config.ts
similarity index 54%
rename from sdk/frontend/oauth2-login-sdk/src/types/config.ts
rename to sdk/frontend/unified-login-sdk/src/types/config.ts
index 8c76dd8..4aba7b1 100644
--- a/sdk/frontend/oauth2-login-sdk/src/types/config.ts
+++ b/sdk/frontend/unified-login-sdk/src/types/config.ts
@@ -16,24 +16,6 @@ export interface SDKConfig {
tenantId?: string;
}
-/**
- * Token信息
- */
-export interface TokenInfo {
- /** 访问令牌 */
- accessToken: string;
- /** 刷新令牌 */
- refreshToken: string;
- /** 令牌类型,默认Bearer */
- tokenType?: string;
- /** 访问令牌过期时间(秒) */
- expiresIn: number;
- /** 刷新令牌过期时间(秒) */
- refreshExpiresIn?: number;
- /** 令牌颁发时间戳 */
- issuedAt: number;
-}
-
/**
* 事件类型
*/
diff --git a/sdk/frontend/oauth2-login-sdk/src/types/index.ts b/sdk/frontend/unified-login-sdk/src/types/index.ts
similarity index 91%
rename from sdk/frontend/oauth2-login-sdk/src/types/index.ts
rename to sdk/frontend/unified-login-sdk/src/types/index.ts
index beaf006..0564bb2 100644
--- a/sdk/frontend/oauth2-login-sdk/src/types/index.ts
+++ b/sdk/frontend/unified-login-sdk/src/types/index.ts
@@ -36,7 +36,13 @@ export interface UnifiedLoginSDK {
* 获取用户信息
* @returns Promise 用户信息
*/
- getUserInfo(): import('./user').UserInfo;
+ getUserInfo(): Promise;
+
+ /**
+ * 刷新用户信息缓存
+ * @returns Promise 更新后的用户信息
+ */
+ refreshUserInfo(): Promise;
/**
* 检查用户是否已认证
diff --git a/sdk/frontend/oauth2-login-sdk/src/types/user.ts b/sdk/frontend/unified-login-sdk/src/types/user.ts
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/src/types/user.ts
rename to sdk/frontend/unified-login-sdk/src/types/user.ts
diff --git a/sdk/frontend/oauth2-login-sdk/src/utils/storage.ts b/sdk/frontend/unified-login-sdk/src/utils/storage.ts
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/src/utils/storage.ts
rename to sdk/frontend/unified-login-sdk/src/utils/storage.ts
diff --git a/sdk/frontend/oauth2-login-sdk/src/utils/url.ts b/sdk/frontend/unified-login-sdk/src/utils/url.ts
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/src/utils/url.ts
rename to sdk/frontend/unified-login-sdk/src/utils/url.ts
diff --git a/sdk/frontend/oauth2-login-sdk/tsconfig.json b/sdk/frontend/unified-login-sdk/tsconfig.json
similarity index 100%
rename from sdk/frontend/oauth2-login-sdk/tsconfig.json
rename to sdk/frontend/unified-login-sdk/tsconfig.json