From 1fd2a709d850c743a6d1da8b65133fc8e51c92d2 Mon Sep 17 00:00:00 2001
From: fuyongxin <110568259@qq.com>
Date: Wed, 03 Jun 2026 14:59:30 +0800
Subject: [PATCH] 修改ruoyi-改为sgd

---
 sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/annotation/EnableCustomConfig.java   |   62 
 sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/annotation/RequiresLogin.java        |   36 
 sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/annotation/RequiresRoles.java        |   52 
 sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/annotation/RequiresPermissions.java  |   54 
 sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/utils/DictUtils.java                 |  150 +-
 sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/aspect/InnerAuthAspect.java          |  102 +-
 sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/handler/GlobalExceptionHandler.java  |  332 ++++----
 sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/auth/AuthLogic.java                  |  746 +++++++++---------
 sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/feign/FeignAutoConfiguration.java    |   40 
 sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/auth/AuthUtil.java                   |  334 ++++----
 sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/annotation/EnableRyFeignClients.java |   58 
 sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/config/WebMvcConfig.java             |   66 
 sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/annotation/InnerAuth.java            |   36 
 sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/interceptor/HeaderInterceptor.java   |  108 +-
 sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/config/ApplicationConfig.java        |   52 
 sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/annotation/Logical.java              |   40 
 sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/feign/FeignRequestInterceptor.java   |  106 +-
 17 files changed, 1,187 insertions(+), 1,187 deletions(-)

diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/annotation/EnableCustomConfig.java b/sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/annotation/EnableCustomConfig.java
similarity index 81%
rename from ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/annotation/EnableCustomConfig.java
rename to sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/annotation/EnableCustomConfig.java
index fa2a8b2..b79d1f2 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/annotation/EnableCustomConfig.java
+++ b/sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/annotation/EnableCustomConfig.java
@@ -1,31 +1,31 @@
-package com.ruoyi.common.security.annotation;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Inherited;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import org.mybatis.spring.annotation.MapperScan;
-import org.springframework.context.annotation.EnableAspectJAutoProxy;
-import org.springframework.context.annotation.Import;
-import org.springframework.scheduling.annotation.EnableAsync;
-import com.ruoyi.common.security.config.ApplicationConfig;
-import com.ruoyi.common.security.feign.FeignAutoConfiguration;
-
-@Target(ElementType.TYPE)
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-@Inherited
-// 表示通过aop框架暴露该代理对象,AopContext能够访问
-@EnableAspectJAutoProxy(exposeProxy = true)
-// 指定要扫描的Mapper类的包的路径
-@MapperScan("com.ruoyi.**.mapper")
-// 开启线程异步执行
-@EnableAsync
-// 自动加载类
-@Import({ ApplicationConfig.class, FeignAutoConfiguration.class })
-public @interface EnableCustomConfig
-{
-
-}
+package com.sgd.common.security.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.context.annotation.Import;
+import org.springframework.scheduling.annotation.EnableAsync;
+import com.sgd.common.security.config.ApplicationConfig;
+import com.sgd.common.security.feign.FeignAutoConfiguration;
+
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+@Inherited
+// 表示通过aop框架暴露该代理对象,AopContext能够访问
+@EnableAspectJAutoProxy(exposeProxy = true)
+// 指定要扫描的Mapper类的包的路径
+@MapperScan("com.sgd.**.mapper")
+// 开启线程异步执行
+@EnableAsync
+// 自动加载类
+@Import({ ApplicationConfig.class, FeignAutoConfiguration.class })
+public @interface EnableCustomConfig
+{
+
+}
diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/annotation/EnableRyFeignClients.java b/sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/annotation/EnableRyFeignClients.java
similarity index 85%
rename from ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/annotation/EnableRyFeignClients.java
rename to sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/annotation/EnableRyFeignClients.java
index 2000ff1..7846edf 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/annotation/EnableRyFeignClients.java
+++ b/sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/annotation/EnableRyFeignClients.java
@@ -1,29 +1,29 @@
-package com.ruoyi.common.security.annotation;
-
-import org.springframework.cloud.openfeign.EnableFeignClients;
-import org.springframework.core.annotation.AliasFor;
-import java.lang.annotation.*;
-
-/**
- * 自定义feign注解
- * 添加basePackages路径
- * 
- * @author ruoyi
- */
-@Target(ElementType.TYPE)
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-@EnableFeignClients
-public @interface EnableRyFeignClients
-{
-    String[] value() default {};
-
-    @AliasFor(annotation = EnableFeignClients.class, attribute = "basePackages")
-    String[] basePackages() default { "com.ruoyi" };
-
-    Class<?>[] basePackageClasses() default {};
-
-    Class<?>[] defaultConfiguration() default {};
-
-    Class<?>[] clients() default {};
-}
+package com.sgd.common.security.annotation;
+
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.core.annotation.AliasFor;
+import java.lang.annotation.*;
+
+/**
+ * 自定义feign注解
+ * 添加basePackages路径
+ * 
+ * @author ruoyi
+ */
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+@EnableFeignClients
+public @interface EnableRyFeignClients
+{
+    String[] value() default {};
+
+    @AliasFor(annotation = EnableFeignClients.class, attribute = "basePackages")
+    String[] basePackages() default { "com.sgd" };
+
+    Class<?>[] basePackageClasses() default {};
+
+    Class<?>[] defaultConfiguration() default {};
+
+    Class<?>[] clients() default {};
+}
diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/annotation/InnerAuth.java b/sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/annotation/InnerAuth.java
similarity index 85%
rename from ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/annotation/InnerAuth.java
rename to sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/annotation/InnerAuth.java
index 80fa59e..95f1cfd 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/annotation/InnerAuth.java
+++ b/sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/annotation/InnerAuth.java
@@ -1,19 +1,19 @@
-package com.ruoyi.common.security.annotation;
-
-import java.lang.annotation.*;
-
-/**
- * 内部认证注解
- * 
- * @author ruoyi
- */
-@Target(ElementType.METHOD)
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-public @interface InnerAuth
-{
-    /**
-     * 是否校验用户信息
-     */
-    boolean isUser() default false;
+package com.sgd.common.security.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * 内部认证注解
+ * 
+ * @author ruoyi
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface InnerAuth
+{
+    /**
+     * 是否校验用户信息
+     */
+    boolean isUser() default false;
 }
\ No newline at end of file
diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/annotation/Logical.java b/sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/annotation/Logical.java
similarity index 81%
rename from ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/annotation/Logical.java
rename to sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/annotation/Logical.java
index e88f56c..75fa2a6 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/annotation/Logical.java
+++ b/sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/annotation/Logical.java
@@ -1,20 +1,20 @@
-package com.ruoyi.common.security.annotation;
-
-/**
- * 权限注解的验证模式
- * 
- * @author ruoyi
- *
- */
-public enum Logical
-{
-    /**
-     * 必须具有所有的元素
-     */
-    AND,
-
-    /**
-     * 只需具有其中一个元素
-     */
-    OR
-}
+package com.sgd.common.security.annotation;
+
+/**
+ * 权限注解的验证模式
+ * 
+ * @author ruoyi
+ *
+ */
+public enum Logical
+{
+    /**
+     * 必须具有所有的元素
+     */
+    AND,
+
+    /**
+     * 只需具有其中一个元素
+     */
+    OR
+}
diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/annotation/RequiresLogin.java b/sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/annotation/RequiresLogin.java
similarity index 88%
rename from ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/annotation/RequiresLogin.java
rename to sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/annotation/RequiresLogin.java
index 0910b12..874275c 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/annotation/RequiresLogin.java
+++ b/sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/annotation/RequiresLogin.java
@@ -1,18 +1,18 @@
-package com.ruoyi.common.security.annotation;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * 登录认证:只有登录之后才能进入该方法
- * 
- * @author ruoyi
- *
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target({ ElementType.METHOD, ElementType.TYPE })
-public @interface RequiresLogin
-{
-}
+package com.sgd.common.security.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 登录认证:只有登录之后才能进入该方法
+ * 
+ * @author ruoyi
+ *
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ ElementType.METHOD, ElementType.TYPE })
+public @interface RequiresLogin
+{
+}
diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/annotation/RequiresPermissions.java b/sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/annotation/RequiresPermissions.java
similarity index 92%
rename from ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/annotation/RequiresPermissions.java
rename to sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/annotation/RequiresPermissions.java
index 4adf4df..c5deb38 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/annotation/RequiresPermissions.java
+++ b/sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/annotation/RequiresPermissions.java
@@ -1,27 +1,27 @@
-package com.ruoyi.common.security.annotation;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * 权限认证:必须具有指定权限才能进入该方法
- * 
- * @author ruoyi
- *
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target({ ElementType.METHOD, ElementType.TYPE })
-public @interface RequiresPermissions
-{
-    /**
-     * 需要校验的权限码
-     */
-    String[] value() default {};
-
-    /**
-     * 验证模式:AND | OR,默认AND
-     */
-    Logical logical() default Logical.AND;
-}
+package com.sgd.common.security.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 权限认证:必须具有指定权限才能进入该方法
+ * 
+ * @author ruoyi
+ *
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ ElementType.METHOD, ElementType.TYPE })
+public @interface RequiresPermissions
+{
+    /**
+     * 需要校验的权限码
+     */
+    String[] value() default {};
+
+    /**
+     * 验证模式:AND | OR,默认AND
+     */
+    Logical logical() default Logical.AND;
+}
diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/annotation/RequiresRoles.java b/sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/annotation/RequiresRoles.java
similarity index 92%
rename from ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/annotation/RequiresRoles.java
rename to sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/annotation/RequiresRoles.java
index 546620d..03575f0 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/annotation/RequiresRoles.java
+++ b/sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/annotation/RequiresRoles.java
@@ -1,26 +1,26 @@
-package com.ruoyi.common.security.annotation;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * 角色认证:必须具有指定角色标识才能进入该方法
- * 
- * @author ruoyi
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target({ ElementType.METHOD, ElementType.TYPE })
-public @interface RequiresRoles
-{
-    /**
-     * 需要校验的角色标识
-     */
-    String[] value() default {};
-
-    /**
-     * 验证逻辑:AND | OR,默认AND
-     */
-    Logical logical() default Logical.AND;
-}
+package com.sgd.common.security.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 角色认证:必须具有指定角色标识才能进入该方法
+ * 
+ * @author ruoyi
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ ElementType.METHOD, ElementType.TYPE })
+public @interface RequiresRoles
+{
+    /**
+     * 需要校验的角色标识
+     */
+    String[] value() default {};
+
+    /**
+     * 验证逻辑:AND | OR,默认AND
+     */
+    Logical logical() default Logical.AND;
+}
diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/aspect/InnerAuthAspect.java b/sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/aspect/InnerAuthAspect.java
similarity index 81%
rename from ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/aspect/InnerAuthAspect.java
rename to sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/aspect/InnerAuthAspect.java
index 780f65e..cbf12ed 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/aspect/InnerAuthAspect.java
+++ b/sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/aspect/InnerAuthAspect.java
@@ -1,51 +1,51 @@
-package com.ruoyi.common.security.aspect;
-
-import org.aspectj.lang.ProceedingJoinPoint;
-import org.aspectj.lang.annotation.Around;
-import org.aspectj.lang.annotation.Aspect;
-import org.springframework.core.Ordered;
-import org.springframework.stereotype.Component;
-import com.ruoyi.common.core.constant.SecurityConstants;
-import com.ruoyi.common.core.exception.InnerAuthException;
-import com.ruoyi.common.core.utils.ServletUtils;
-import com.ruoyi.common.core.utils.StringUtils;
-import com.ruoyi.common.security.annotation.InnerAuth;
-
-/**
- * 内部服务调用验证处理
- * 
- * @author ruoyi
- */
-@Aspect
-@Component
-public class InnerAuthAspect implements Ordered
-{
-    @Around("@annotation(innerAuth)")
-    public Object innerAround(ProceedingJoinPoint point, InnerAuth innerAuth) throws Throwable
-    {
-        String source = ServletUtils.getRequest().getHeader(SecurityConstants.FROM_SOURCE);
-        // 内部请求验证
-        if (!StringUtils.equals(SecurityConstants.INNER, source))
-        {
-            throw new InnerAuthException("没有内部访问权限,不允许访问");
-        }
-
-        String userid = ServletUtils.getRequest().getHeader(SecurityConstants.DETAILS_USER_ID);
-        String username = ServletUtils.getRequest().getHeader(SecurityConstants.DETAILS_USERNAME);
-        // 用户信息验证
-        if (innerAuth.isUser() && (StringUtils.isEmpty(userid) || StringUtils.isEmpty(username)))
-        {
-            throw new InnerAuthException("没有设置用户信息,不允许访问 ");
-        }
-        return point.proceed();
-    }
-
-    /**
-     * 确保在权限认证aop执行前执行
-     */
-    @Override
-    public int getOrder()
-    {
-        return Ordered.HIGHEST_PRECEDENCE + 1;
-    }
-}
+package com.sgd.common.security.aspect;
+
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.springframework.core.Ordered;
+import org.springframework.stereotype.Component;
+import com.sgd.common.core.constant.SecurityConstants;
+import com.sgd.common.core.exception.InnerAuthException;
+import com.sgd.common.core.utils.ServletUtils;
+import com.sgd.common.core.utils.StringUtils;
+import com.sgd.common.security.annotation.InnerAuth;
+
+/**
+ * 内部服务调用验证处理
+ * 
+ * @author ruoyi
+ */
+@Aspect
+@Component
+public class InnerAuthAspect implements Ordered
+{
+    @Around("@annotation(innerAuth)")
+    public Object innerAround(ProceedingJoinPoint point, InnerAuth innerAuth) throws Throwable
+    {
+        String source = ServletUtils.getRequest().getHeader(SecurityConstants.FROM_SOURCE);
+        // 内部请求验证
+        if (!StringUtils.equals(SecurityConstants.INNER, source))
+        {
+            throw new InnerAuthException("没有内部访问权限,不允许访问");
+        }
+
+        String userid = ServletUtils.getRequest().getHeader(SecurityConstants.DETAILS_USER_ID);
+        String username = ServletUtils.getRequest().getHeader(SecurityConstants.DETAILS_USERNAME);
+        // 用户信息验证
+        if (innerAuth.isUser() && (StringUtils.isEmpty(userid) || StringUtils.isEmpty(username)))
+        {
+            throw new InnerAuthException("没有设置用户信息,不允许访问 ");
+        }
+        return point.proceed();
+    }
+
+    /**
+     * 确保在权限认证aop执行前执行
+     */
+    @Override
+    public int getOrder()
+    {
+        return Ordered.HIGHEST_PRECEDENCE + 1;
+    }
+}
diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/auth/AuthLogic.java b/sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/auth/AuthLogic.java
similarity index 91%
rename from ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/auth/AuthLogic.java
rename to sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/auth/AuthLogic.java
index 1fa56ba..e74ce00 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/auth/AuthLogic.java
+++ b/sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/auth/AuthLogic.java
@@ -1,373 +1,373 @@
-package com.ruoyi.common.security.auth;
-
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Set;
-import org.springframework.util.PatternMatchUtils;
-import com.ruoyi.common.core.context.SecurityContextHolder;
-import com.ruoyi.common.core.exception.auth.NotLoginException;
-import com.ruoyi.common.core.exception.auth.NotPermissionException;
-import com.ruoyi.common.core.exception.auth.NotRoleException;
-import com.ruoyi.common.core.utils.SpringUtils;
-import com.ruoyi.common.core.utils.StringUtils;
-import com.ruoyi.common.security.annotation.Logical;
-import com.ruoyi.common.security.annotation.RequiresLogin;
-import com.ruoyi.common.security.annotation.RequiresPermissions;
-import com.ruoyi.common.security.annotation.RequiresRoles;
-import com.ruoyi.common.security.service.TokenService;
-import com.ruoyi.common.security.utils.SecurityUtils;
-import com.ruoyi.system.api.model.LoginUser;
-
-/**
- * Token 权限验证,逻辑实现类
- * 
- * @author ruoyi
- */
-public class AuthLogic
-{
-    /** 所有权限标识 */
-    private static final String ALL_PERMISSION = "*:*:*";
-
-    /** 管理员角色权限标识 */
-    private static final String SUPER_ADMIN = "admin";
-
-    public TokenService tokenService = SpringUtils.getBean(TokenService.class);
-
-    /**
-     * 会话注销
-     */
-    public void logout()
-    {
-        String token = SecurityUtils.getToken();
-        if (token == null)
-        {
-            return;
-        }
-        logoutByToken(token);
-    }
-
-    /**
-     * 会话注销,根据指定Token
-     */
-    public void logoutByToken(String token)
-    {
-        tokenService.delLoginUser(token);
-    }
-
-    /**
-     * 检验用户是否已经登录,如未登录,则抛出异常
-     */
-    public void checkLogin()
-    {
-        getLoginUser();
-    }
-
-    /**
-     * 获取当前用户缓存信息, 如果未登录,则抛出异常
-     * 
-     * @return 用户缓存信息
-     */
-    public LoginUser getLoginUser()
-    {
-        String token = SecurityUtils.getToken();
-        if (token == null)
-        {
-            throw new NotLoginException("未提供token");
-        }
-        LoginUser loginUser = SecurityUtils.getLoginUser();
-        if (loginUser == null)
-        {
-            throw new NotLoginException("无效的token");
-        }
-        return loginUser;
-    }
-
-    /**
-     * 获取当前用户缓存信息, 如果未登录,则抛出异常
-     * 
-     * @param token 前端传递的认证信息
-     * @return 用户缓存信息
-     */
-    public LoginUser getLoginUser(String token)
-    {
-        return tokenService.getLoginUser(token);
-    }
-
-    /**
-     * 验证当前用户有效期, 如果相差不足120分钟,自动刷新缓存
-     * 
-     * @param loginUser 当前用户信息
-     */
-    public void verifyLoginUserExpire(LoginUser loginUser)
-    {
-        tokenService.verifyToken(loginUser);
-    }
-
-    /**
-     * 验证用户是否具备某权限
-     * 
-     * @param permission 权限字符串
-     * @return 用户是否具备某权限
-     */
-    public boolean hasPermi(String permission)
-    {
-        return hasPermi(getPermiList(), permission);
-    }
-
-    /**
-     * 验证用户是否具备某权限, 如果验证未通过,则抛出异常: NotPermissionException
-     * 
-     * @param permission 权限字符串
-     * @return 用户是否具备某权限
-     */
-    public void checkPermi(String permission)
-    {
-        if (!hasPermi(getPermiList(), permission))
-        {
-            throw new NotPermissionException(permission);
-        }
-    }
-
-    /**
-     * 根据注解(@RequiresPermissions)鉴权, 如果验证未通过,则抛出异常: NotPermissionException
-     * 
-     * @param requiresPermissions 注解对象
-     */
-    public void checkPermi(RequiresPermissions requiresPermissions)
-    {
-        SecurityContextHolder.setPermission(StringUtils.join(requiresPermissions.value(), ","));
-        if (requiresPermissions.logical() == Logical.AND)
-        {
-            checkPermiAnd(requiresPermissions.value());
-        }
-        else
-        {
-            checkPermiOr(requiresPermissions.value());
-        }
-    }
-
-    /**
-     * 验证用户是否含有指定权限,必须全部拥有
-     *
-     * @param permissions 权限列表
-     */
-    public void checkPermiAnd(String... permissions)
-    {
-        Set<String> permissionList = getPermiList();
-        for (String permission : permissions)
-        {
-            if (!hasPermi(permissionList, permission))
-            {
-                throw new NotPermissionException(permission);
-            }
-        }
-    }
-
-    /**
-     * 验证用户是否含有指定权限,只需包含其中一个
-     * 
-     * @param permissions 权限码数组
-     */
-    public void checkPermiOr(String... permissions)
-    {
-        Set<String> permissionList = getPermiList();
-        for (String permission : permissions)
-        {
-            if (hasPermi(permissionList, permission))
-            {
-                return;
-            }
-        }
-        if (permissions.length > 0)
-        {
-            throw new NotPermissionException(permissions);
-        }
-    }
-
-    /**
-     * 判断用户是否拥有某个角色
-     * 
-     * @param role 角色标识
-     * @return 用户是否具备某角色
-     */
-    public boolean hasRole(String role)
-    {
-        return hasRole(getRoleList(), role);
-    }
-
-    /**
-     * 判断用户是否拥有某个角色, 如果验证未通过,则抛出异常: NotRoleException
-     * 
-     * @param role 角色标识
-     */
-    public void checkRole(String role)
-    {
-        if (!hasRole(role))
-        {
-            throw new NotRoleException(role);
-        }
-    }
-
-    /**
-     * 根据注解(@RequiresRoles)鉴权
-     * 
-     * @param requiresRoles 注解对象
-     */
-    public void checkRole(RequiresRoles requiresRoles)
-    {
-        if (requiresRoles.logical() == Logical.AND)
-        {
-            checkRoleAnd(requiresRoles.value());
-        }
-        else
-        {
-            checkRoleOr(requiresRoles.value());
-        }
-    }
-
-    /**
-     * 验证用户是否含有指定角色,必须全部拥有
-     * 
-     * @param roles 角色标识数组
-     */
-    public void checkRoleAnd(String... roles)
-    {
-        Set<String> roleList = getRoleList();
-        for (String role : roles)
-        {
-            if (!hasRole(roleList, role))
-            {
-                throw new NotRoleException(role);
-            }
-        }
-    }
-
-    /**
-     * 验证用户是否含有指定角色,只需包含其中一个
-     * 
-     * @param roles 角色标识数组
-     */
-    public void checkRoleOr(String... roles)
-    {
-        Set<String> roleList = getRoleList();
-        for (String role : roles)
-        {
-            if (hasRole(roleList, role))
-            {
-                return;
-            }
-        }
-        if (roles.length > 0)
-        {
-            throw new NotRoleException(roles);
-        }
-    }
-
-    /**
-     * 根据注解(@RequiresLogin)鉴权
-     * 
-     * @param at 注解对象
-     */
-    public void checkByAnnotation(RequiresLogin at)
-    {
-        this.checkLogin();
-    }
-
-    /**
-     * 根据注解(@RequiresRoles)鉴权
-     * 
-     * @param at 注解对象
-     */
-    public void checkByAnnotation(RequiresRoles at)
-    {
-        String[] roleArray = at.value();
-        if (at.logical() == Logical.AND)
-        {
-            this.checkRoleAnd(roleArray);
-        }
-        else
-        {
-            this.checkRoleOr(roleArray);
-        }
-    }
-
-    /**
-     * 根据注解(@RequiresPermissions)鉴权
-     * 
-     * @param at 注解对象
-     */
-    public void checkByAnnotation(RequiresPermissions at)
-    {
-        String[] permissionArray = at.value();
-        if (at.logical() == Logical.AND)
-        {
-            this.checkPermiAnd(permissionArray);
-        }
-        else
-        {
-            this.checkPermiOr(permissionArray);
-        }
-    }
-
-    /**
-     * 获取当前账号的角色列表
-     * 
-     * @return 角色列表
-     */
-    public Set<String> getRoleList()
-    {
-        try
-        {
-            LoginUser loginUser = getLoginUser();
-            return loginUser.getRoles();
-        }
-        catch (Exception e)
-        {
-            return new HashSet<>();
-        }
-    }
-
-    /**
-     * 获取当前账号的权限列表
-     * 
-     * @return 权限列表
-     */
-    public Set<String> getPermiList()
-    {
-        try
-        {
-            LoginUser loginUser = getLoginUser();
-            return loginUser.getPermissions();
-        }
-        catch (Exception e)
-        {
-            return new HashSet<>();
-        }
-    }
-
-    /**
-     * 判断是否包含权限
-     * 
-     * @param authorities 权限列表
-     * @param permission 权限字符串
-     * @return 用户是否具备某权限
-     */
-    public boolean hasPermi(Collection<String> authorities, String permission)
-    {
-        return authorities.stream().filter(StringUtils::hasText)
-                .anyMatch(x -> ALL_PERMISSION.equals(x) || PatternMatchUtils.simpleMatch(x, permission));
-    }
-
-    /**
-     * 判断是否包含角色
-     * 
-     * @param roles 角色列表
-     * @param role 角色
-     * @return 用户是否具备某角色权限
-     */
-    public boolean hasRole(Collection<String> roles, String role)
-    {
-        return roles.stream().filter(StringUtils::hasText)
-                .anyMatch(x -> SUPER_ADMIN.equals(x) || PatternMatchUtils.simpleMatch(x, role));
-    }
-}
+package com.sgd.common.security.auth;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+import org.springframework.util.PatternMatchUtils;
+import com.sgd.common.core.context.SecurityContextHolder;
+import com.sgd.common.core.exception.auth.NotLoginException;
+import com.sgd.common.core.exception.auth.NotPermissionException;
+import com.sgd.common.core.exception.auth.NotRoleException;
+import com.sgd.common.core.utils.SpringUtils;
+import com.sgd.common.core.utils.StringUtils;
+import com.sgd.common.security.annotation.Logical;
+import com.sgd.common.security.annotation.RequiresLogin;
+import com.sgd.common.security.annotation.RequiresPermissions;
+import com.sgd.common.security.annotation.RequiresRoles;
+import com.sgd.common.security.service.TokenService;
+import com.sgd.common.security.utils.SecurityUtils;
+import com.sgd.system.api.model.LoginUser;
+
+/**
+ * Token 权限验证,逻辑实现类
+ * 
+ * @author ruoyi
+ */
+public class AuthLogic
+{
+    /** 所有权限标识 */
+    private static final String ALL_PERMISSION = "*:*:*";
+
+    /** 管理员角色权限标识 */
+    private static final String SUPER_ADMIN = "admin";
+
+    public TokenService tokenService = SpringUtils.getBean(TokenService.class);
+
+    /**
+     * 会话注销
+     */
+    public void logout()
+    {
+        String token = SecurityUtils.getToken();
+        if (token == null)
+        {
+            return;
+        }
+        logoutByToken(token);
+    }
+
+    /**
+     * 会话注销,根据指定Token
+     */
+    public void logoutByToken(String token)
+    {
+        tokenService.delLoginUser(token);
+    }
+
+    /**
+     * 检验用户是否已经登录,如未登录,则抛出异常
+     */
+    public void checkLogin()
+    {
+        getLoginUser();
+    }
+
+    /**
+     * 获取当前用户缓存信息, 如果未登录,则抛出异常
+     * 
+     * @return 用户缓存信息
+     */
+    public LoginUser getLoginUser()
+    {
+        String token = SecurityUtils.getToken();
+        if (token == null)
+        {
+            throw new NotLoginException("未提供token");
+        }
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        if (loginUser == null)
+        {
+            throw new NotLoginException("无效的token");
+        }
+        return loginUser;
+    }
+
+    /**
+     * 获取当前用户缓存信息, 如果未登录,则抛出异常
+     * 
+     * @param token 前端传递的认证信息
+     * @return 用户缓存信息
+     */
+    public LoginUser getLoginUser(String token)
+    {
+        return tokenService.getLoginUser(token);
+    }
+
+    /**
+     * 验证当前用户有效期, 如果相差不足120分钟,自动刷新缓存
+     * 
+     * @param loginUser 当前用户信息
+     */
+    public void verifyLoginUserExpire(LoginUser loginUser)
+    {
+        tokenService.verifyToken(loginUser);
+    }
+
+    /**
+     * 验证用户是否具备某权限
+     * 
+     * @param permission 权限字符串
+     * @return 用户是否具备某权限
+     */
+    public boolean hasPermi(String permission)
+    {
+        return hasPermi(getPermiList(), permission);
+    }
+
+    /**
+     * 验证用户是否具备某权限, 如果验证未通过,则抛出异常: NotPermissionException
+     * 
+     * @param permission 权限字符串
+     * @return 用户是否具备某权限
+     */
+    public void checkPermi(String permission)
+    {
+        if (!hasPermi(getPermiList(), permission))
+        {
+            throw new NotPermissionException(permission);
+        }
+    }
+
+    /**
+     * 根据注解(@RequiresPermissions)鉴权, 如果验证未通过,则抛出异常: NotPermissionException
+     * 
+     * @param requiresPermissions 注解对象
+     */
+    public void checkPermi(RequiresPermissions requiresPermissions)
+    {
+        SecurityContextHolder.setPermission(StringUtils.join(requiresPermissions.value(), ","));
+        if (requiresPermissions.logical() == Logical.AND)
+        {
+            checkPermiAnd(requiresPermissions.value());
+        }
+        else
+        {
+            checkPermiOr(requiresPermissions.value());
+        }
+    }
+
+    /**
+     * 验证用户是否含有指定权限,必须全部拥有
+     *
+     * @param permissions 权限列表
+     */
+    public void checkPermiAnd(String... permissions)
+    {
+        Set<String> permissionList = getPermiList();
+        for (String permission : permissions)
+        {
+            if (!hasPermi(permissionList, permission))
+            {
+                throw new NotPermissionException(permission);
+            }
+        }
+    }
+
+    /**
+     * 验证用户是否含有指定权限,只需包含其中一个
+     * 
+     * @param permissions 权限码数组
+     */
+    public void checkPermiOr(String... permissions)
+    {
+        Set<String> permissionList = getPermiList();
+        for (String permission : permissions)
+        {
+            if (hasPermi(permissionList, permission))
+            {
+                return;
+            }
+        }
+        if (permissions.length > 0)
+        {
+            throw new NotPermissionException(permissions);
+        }
+    }
+
+    /**
+     * 判断用户是否拥有某个角色
+     * 
+     * @param role 角色标识
+     * @return 用户是否具备某角色
+     */
+    public boolean hasRole(String role)
+    {
+        return hasRole(getRoleList(), role);
+    }
+
+    /**
+     * 判断用户是否拥有某个角色, 如果验证未通过,则抛出异常: NotRoleException
+     * 
+     * @param role 角色标识
+     */
+    public void checkRole(String role)
+    {
+        if (!hasRole(role))
+        {
+            throw new NotRoleException(role);
+        }
+    }
+
+    /**
+     * 根据注解(@RequiresRoles)鉴权
+     * 
+     * @param requiresRoles 注解对象
+     */
+    public void checkRole(RequiresRoles requiresRoles)
+    {
+        if (requiresRoles.logical() == Logical.AND)
+        {
+            checkRoleAnd(requiresRoles.value());
+        }
+        else
+        {
+            checkRoleOr(requiresRoles.value());
+        }
+    }
+
+    /**
+     * 验证用户是否含有指定角色,必须全部拥有
+     * 
+     * @param roles 角色标识数组
+     */
+    public void checkRoleAnd(String... roles)
+    {
+        Set<String> roleList = getRoleList();
+        for (String role : roles)
+        {
+            if (!hasRole(roleList, role))
+            {
+                throw new NotRoleException(role);
+            }
+        }
+    }
+
+    /**
+     * 验证用户是否含有指定角色,只需包含其中一个
+     * 
+     * @param roles 角色标识数组
+     */
+    public void checkRoleOr(String... roles)
+    {
+        Set<String> roleList = getRoleList();
+        for (String role : roles)
+        {
+            if (hasRole(roleList, role))
+            {
+                return;
+            }
+        }
+        if (roles.length > 0)
+        {
+            throw new NotRoleException(roles);
+        }
+    }
+
+    /**
+     * 根据注解(@RequiresLogin)鉴权
+     * 
+     * @param at 注解对象
+     */
+    public void checkByAnnotation(RequiresLogin at)
+    {
+        this.checkLogin();
+    }
+
+    /**
+     * 根据注解(@RequiresRoles)鉴权
+     * 
+     * @param at 注解对象
+     */
+    public void checkByAnnotation(RequiresRoles at)
+    {
+        String[] roleArray = at.value();
+        if (at.logical() == Logical.AND)
+        {
+            this.checkRoleAnd(roleArray);
+        }
+        else
+        {
+            this.checkRoleOr(roleArray);
+        }
+    }
+
+    /**
+     * 根据注解(@RequiresPermissions)鉴权
+     * 
+     * @param at 注解对象
+     */
+    public void checkByAnnotation(RequiresPermissions at)
+    {
+        String[] permissionArray = at.value();
+        if (at.logical() == Logical.AND)
+        {
+            this.checkPermiAnd(permissionArray);
+        }
+        else
+        {
+            this.checkPermiOr(permissionArray);
+        }
+    }
+
+    /**
+     * 获取当前账号的角色列表
+     * 
+     * @return 角色列表
+     */
+    public Set<String> getRoleList()
+    {
+        try
+        {
+            LoginUser loginUser = getLoginUser();
+            return loginUser.getRoles();
+        }
+        catch (Exception e)
+        {
+            return new HashSet<>();
+        }
+    }
+
+    /**
+     * 获取当前账号的权限列表
+     * 
+     * @return 权限列表
+     */
+    public Set<String> getPermiList()
+    {
+        try
+        {
+            LoginUser loginUser = getLoginUser();
+            return loginUser.getPermissions();
+        }
+        catch (Exception e)
+        {
+            return new HashSet<>();
+        }
+    }
+
+    /**
+     * 判断是否包含权限
+     * 
+     * @param authorities 权限列表
+     * @param permission 权限字符串
+     * @return 用户是否具备某权限
+     */
+    public boolean hasPermi(Collection<String> authorities, String permission)
+    {
+        return authorities.stream().filter(StringUtils::hasText)
+                .anyMatch(x -> ALL_PERMISSION.equals(x) || PatternMatchUtils.simpleMatch(x, permission));
+    }
+
+    /**
+     * 判断是否包含角色
+     * 
+     * @param roles 角色列表
+     * @param role 角色
+     * @return 用户是否具备某角色权限
+     */
+    public boolean hasRole(Collection<String> roles, String role)
+    {
+        return roles.stream().filter(StringUtils::hasText)
+                .anyMatch(x -> SUPER_ADMIN.equals(x) || PatternMatchUtils.simpleMatch(x, role));
+    }
+}
diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/auth/AuthUtil.java b/sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/auth/AuthUtil.java
similarity index 94%
rename from ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/auth/AuthUtil.java
rename to sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/auth/AuthUtil.java
index ac712c9..ff718b3 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/auth/AuthUtil.java
+++ b/sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/auth/AuthUtil.java
@@ -1,167 +1,167 @@
-package com.ruoyi.common.security.auth;
-
-import com.ruoyi.common.security.annotation.RequiresPermissions;
-import com.ruoyi.common.security.annotation.RequiresRoles;
-import com.ruoyi.system.api.model.LoginUser;
-
-/**
- * Token 权限验证工具类
- * 
- * @author ruoyi
- */
-public class AuthUtil
-{
-    /**
-     * 底层的 AuthLogic 对象
-     */
-    public static AuthLogic authLogic = new AuthLogic();
-
-    /**
-     * 会话注销
-     */
-    public static void logout()
-    {
-        authLogic.logout();
-    }
-
-    /**
-     * 会话注销,根据指定Token
-     * 
-     * @param token 指定token
-     */
-    public static void logoutByToken(String token)
-    {
-        authLogic.logoutByToken(token);
-    }
-
-    /**
-     * 检验当前会话是否已经登录,如未登录,则抛出异常
-     */
-    public static void checkLogin()
-    {
-        authLogic.checkLogin();
-    }
-
-    /**
-     * 获取当前登录用户信息
-     * 
-     * @param token 指定token
-     * @return 用户信息
-     */
-    public static LoginUser getLoginUser(String token)
-    {
-        return authLogic.getLoginUser(token);
-    }
-
-    /**
-     * 验证当前用户有效期
-     * 
-     * @param loginUser 用户信息
-     */
-    public static void verifyLoginUserExpire(LoginUser loginUser)
-    {
-        authLogic.verifyLoginUserExpire(loginUser);
-    }
-
-    /**
-     * 当前账号是否含有指定角色标识, 返回true或false
-     * 
-     * @param role 角色标识
-     * @return 是否含有指定角色标识
-     */
-    public static boolean hasRole(String role)
-    {
-        return authLogic.hasRole(role);
-    }
-
-    /**
-     * 当前账号是否含有指定角色标识, 如果验证未通过,则抛出异常: NotRoleException
-     * 
-     * @param role 角色标识
-     */
-    public static void checkRole(String role)
-    {
-        authLogic.checkRole(role);
-    }
-
-    /**
-     * 根据注解传入参数鉴权, 如果验证未通过,则抛出异常: NotRoleException
-     * 
-     * @param requiresRoles 角色权限注解
-     */
-    public static void checkRole(RequiresRoles requiresRoles)
-    {
-        authLogic.checkRole(requiresRoles);
-    }
-
-    /**
-     * 当前账号是否含有指定角色标识 [指定多个,必须全部验证通过]
-     * 
-     * @param roles 角色标识数组
-     */
-    public static void checkRoleAnd(String... roles)
-    {
-        authLogic.checkRoleAnd(roles);
-    }
-
-    /**
-     * 当前账号是否含有指定角色标识 [指定多个,只要其一验证通过即可]
-     * 
-     * @param roles 角色标识数组
-     */
-    public static void checkRoleOr(String... roles)
-    {
-        authLogic.checkRoleOr(roles);
-    }
-
-    /**
-     * 当前账号是否含有指定权限, 返回true或false
-     * 
-     * @param permission 权限码
-     * @return 是否含有指定权限
-     */
-    public static boolean hasPermi(String permission)
-    {
-        return authLogic.hasPermi(permission);
-    }
-
-    /**
-     * 当前账号是否含有指定权限, 如果验证未通过,则抛出异常: NotPermissionException
-     * 
-     * @param permission 权限码
-     */
-    public static void checkPermi(String permission)
-    {
-        authLogic.checkPermi(permission);
-    }
-
-    /**
-     * 根据注解传入参数鉴权, 如果验证未通过,则抛出异常: NotPermissionException
-     * 
-     * @param requiresPermissions 权限注解
-     */
-    public static void checkPermi(RequiresPermissions requiresPermissions)
-    {
-        authLogic.checkPermi(requiresPermissions);
-    }
-
-    /**
-     * 当前账号是否含有指定权限 [指定多个,必须全部验证通过]
-     * 
-     * @param permissions 权限码数组
-     */
-    public static void checkPermiAnd(String... permissions)
-    {
-        authLogic.checkPermiAnd(permissions);
-    }
-
-    /**
-     * 当前账号是否含有指定权限 [指定多个,只要其一验证通过即可]
-     * 
-     * @param permissions 权限码数组
-     */
-    public static void checkPermiOr(String... permissions)
-    {
-        authLogic.checkPermiOr(permissions);
-    }
-}
+package com.sgd.common.security.auth;
+
+import com.sgd.common.security.annotation.RequiresPermissions;
+import com.sgd.common.security.annotation.RequiresRoles;
+import com.sgd.system.api.model.LoginUser;
+
+/**
+ * Token 权限验证工具类
+ * 
+ * @author ruoyi
+ */
+public class AuthUtil
+{
+    /**
+     * 底层的 AuthLogic 对象
+     */
+    public static AuthLogic authLogic = new AuthLogic();
+
+    /**
+     * 会话注销
+     */
+    public static void logout()
+    {
+        authLogic.logout();
+    }
+
+    /**
+     * 会话注销,根据指定Token
+     * 
+     * @param token 指定token
+     */
+    public static void logoutByToken(String token)
+    {
+        authLogic.logoutByToken(token);
+    }
+
+    /**
+     * 检验当前会话是否已经登录,如未登录,则抛出异常
+     */
+    public static void checkLogin()
+    {
+        authLogic.checkLogin();
+    }
+
+    /**
+     * 获取当前登录用户信息
+     * 
+     * @param token 指定token
+     * @return 用户信息
+     */
+    public static LoginUser getLoginUser(String token)
+    {
+        return authLogic.getLoginUser(token);
+    }
+
+    /**
+     * 验证当前用户有效期
+     * 
+     * @param loginUser 用户信息
+     */
+    public static void verifyLoginUserExpire(LoginUser loginUser)
+    {
+        authLogic.verifyLoginUserExpire(loginUser);
+    }
+
+    /**
+     * 当前账号是否含有指定角色标识, 返回true或false
+     * 
+     * @param role 角色标识
+     * @return 是否含有指定角色标识
+     */
+    public static boolean hasRole(String role)
+    {
+        return authLogic.hasRole(role);
+    }
+
+    /**
+     * 当前账号是否含有指定角色标识, 如果验证未通过,则抛出异常: NotRoleException
+     * 
+     * @param role 角色标识
+     */
+    public static void checkRole(String role)
+    {
+        authLogic.checkRole(role);
+    }
+
+    /**
+     * 根据注解传入参数鉴权, 如果验证未通过,则抛出异常: NotRoleException
+     * 
+     * @param requiresRoles 角色权限注解
+     */
+    public static void checkRole(RequiresRoles requiresRoles)
+    {
+        authLogic.checkRole(requiresRoles);
+    }
+
+    /**
+     * 当前账号是否含有指定角色标识 [指定多个,必须全部验证通过]
+     * 
+     * @param roles 角色标识数组
+     */
+    public static void checkRoleAnd(String... roles)
+    {
+        authLogic.checkRoleAnd(roles);
+    }
+
+    /**
+     * 当前账号是否含有指定角色标识 [指定多个,只要其一验证通过即可]
+     * 
+     * @param roles 角色标识数组
+     */
+    public static void checkRoleOr(String... roles)
+    {
+        authLogic.checkRoleOr(roles);
+    }
+
+    /**
+     * 当前账号是否含有指定权限, 返回true或false
+     * 
+     * @param permission 权限码
+     * @return 是否含有指定权限
+     */
+    public static boolean hasPermi(String permission)
+    {
+        return authLogic.hasPermi(permission);
+    }
+
+    /**
+     * 当前账号是否含有指定权限, 如果验证未通过,则抛出异常: NotPermissionException
+     * 
+     * @param permission 权限码
+     */
+    public static void checkPermi(String permission)
+    {
+        authLogic.checkPermi(permission);
+    }
+
+    /**
+     * 根据注解传入参数鉴权, 如果验证未通过,则抛出异常: NotPermissionException
+     * 
+     * @param requiresPermissions 权限注解
+     */
+    public static void checkPermi(RequiresPermissions requiresPermissions)
+    {
+        authLogic.checkPermi(requiresPermissions);
+    }
+
+    /**
+     * 当前账号是否含有指定权限 [指定多个,必须全部验证通过]
+     * 
+     * @param permissions 权限码数组
+     */
+    public static void checkPermiAnd(String... permissions)
+    {
+        authLogic.checkPermiAnd(permissions);
+    }
+
+    /**
+     * 当前账号是否含有指定权限 [指定多个,只要其一验证通过即可]
+     * 
+     * @param permissions 权限码数组
+     */
+    public static void checkPermiOr(String... permissions)
+    {
+        authLogic.checkPermiOr(permissions);
+    }
+}
diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/config/ApplicationConfig.java b/sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/config/ApplicationConfig.java
similarity index 92%
rename from ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/config/ApplicationConfig.java
rename to sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/config/ApplicationConfig.java
index e463b31..e79f94f 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/config/ApplicationConfig.java
+++ b/sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/config/ApplicationConfig.java
@@ -1,26 +1,26 @@
-package com.ruoyi.common.security.config;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.json.JsonMapper;
-import java.util.TimeZone;
-import org.springframework.context.annotation.Bean;
-
-/**
- * 系统配置
- *
- * @author ruoyi
- */
-public class ApplicationConfig
-{
-    /**
-     * 时区配置
-     */
-    @Bean
-    public ObjectMapper objectMapper()
-    {
-        ObjectMapper objectMapper = JsonMapper.builder().build();
-        objectMapper.findAndRegisterModules();
-        objectMapper.setTimeZone(TimeZone.getDefault());
-        return objectMapper;
-    }
-}
+package com.sgd.common.security.config;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.json.JsonMapper;
+import java.util.TimeZone;
+import org.springframework.context.annotation.Bean;
+
+/**
+ * 系统配置
+ *
+ * @author ruoyi
+ */
+public class ApplicationConfig
+{
+    /**
+     * 时区配置
+     */
+    @Bean
+    public ObjectMapper objectMapper()
+    {
+        ObjectMapper objectMapper = JsonMapper.builder().build();
+        objectMapper.findAndRegisterModules();
+        objectMapper.setTimeZone(TimeZone.getDefault());
+        return objectMapper;
+    }
+}
diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/config/WebMvcConfig.java b/sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/config/WebMvcConfig.java
similarity index 87%
rename from ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/config/WebMvcConfig.java
rename to sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/config/WebMvcConfig.java
index b3fa247..09d8f19 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/config/WebMvcConfig.java
+++ b/sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/config/WebMvcConfig.java
@@ -1,33 +1,33 @@
-package com.ruoyi.common.security.config;
-
-import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-import com.ruoyi.common.security.interceptor.HeaderInterceptor;
-
-/**
- * 拦截器配置
- *
- * @author ruoyi
- */
-public class WebMvcConfig implements WebMvcConfigurer
-{
-    /** 不需要拦截地址 */
-    public static final String[] excludeUrls = { "/login", "/logout", "/refresh" };
-
-    @Override
-    public void addInterceptors(InterceptorRegistry registry)
-    {
-        registry.addInterceptor(getHeaderInterceptor())
-                .addPathPatterns("/**")
-                .excludePathPatterns(excludeUrls)
-                .order(-10);
-    }
-
-    /**
-     * 自定义请求头拦截器
-     */
-    public HeaderInterceptor getHeaderInterceptor()
-    {
-        return new HeaderInterceptor();
-    }
-}
+package com.sgd.common.security.config;
+
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+import com.sgd.common.security.interceptor.HeaderInterceptor;
+
+/**
+ * 拦截器配置
+ *
+ * @author ruoyi
+ */
+public class WebMvcConfig implements WebMvcConfigurer
+{
+    /** 不需要拦截地址 */
+    public static final String[] excludeUrls = { "/login", "/logout", "/refresh" };
+
+    @Override
+    public void addInterceptors(InterceptorRegistry registry)
+    {
+        registry.addInterceptor(getHeaderInterceptor())
+                .addPathPatterns("/**")
+                .excludePathPatterns(excludeUrls)
+                .order(-10);
+    }
+
+    /**
+     * 自定义请求头拦截器
+     */
+    public HeaderInterceptor getHeaderInterceptor()
+    {
+        return new HeaderInterceptor();
+    }
+}
diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/feign/FeignAutoConfiguration.java b/sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/feign/FeignAutoConfiguration.java
similarity index 89%
rename from ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/feign/FeignAutoConfiguration.java
rename to sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/feign/FeignAutoConfiguration.java
index 934a959..19206ca 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/feign/FeignAutoConfiguration.java
+++ b/sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/feign/FeignAutoConfiguration.java
@@ -1,20 +1,20 @@
-package com.ruoyi.common.security.feign;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import feign.RequestInterceptor;
-
-/**
- * Feign 配置注册
- *
- * @author ruoyi
- **/
-@Configuration
-public class FeignAutoConfiguration
-{
-    @Bean
-    public RequestInterceptor requestInterceptor()
-    {
-        return new FeignRequestInterceptor();
-    }
-}
+package com.sgd.common.security.feign;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import feign.RequestInterceptor;
+
+/**
+ * Feign 配置注册
+ *
+ * @author ruoyi
+ **/
+@Configuration
+public class FeignAutoConfiguration
+{
+    @Bean
+    public RequestInterceptor requestInterceptor()
+    {
+        return new FeignRequestInterceptor();
+    }
+}
diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/feign/FeignRequestInterceptor.java b/sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/feign/FeignRequestInterceptor.java
similarity index 87%
rename from ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/feign/FeignRequestInterceptor.java
rename to sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/feign/FeignRequestInterceptor.java
index 1004614..ba110e1 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/feign/FeignRequestInterceptor.java
+++ b/sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/feign/FeignRequestInterceptor.java
@@ -1,54 +1,54 @@
-package com.ruoyi.common.security.feign;
-
-import java.util.Map;
-import jakarta.servlet.http.HttpServletRequest;
-import org.springframework.stereotype.Component;
-import com.ruoyi.common.core.constant.SecurityConstants;
-import com.ruoyi.common.core.utils.ServletUtils;
-import com.ruoyi.common.core.utils.StringUtils;
-import com.ruoyi.common.core.utils.ip.IpUtils;
-import feign.RequestInterceptor;
-import feign.RequestTemplate;
-
-/**
- * feign 请求拦截器
- * 
- * @author ruoyi
- */
-@Component
-public class FeignRequestInterceptor implements RequestInterceptor
-{
-    @Override
-    public void apply(RequestTemplate requestTemplate)
-    {
-        HttpServletRequest httpServletRequest = ServletUtils.getRequest();
-        if (StringUtils.isNotNull(httpServletRequest))
-        {
-            Map<String, String> headers = ServletUtils.getHeaders(httpServletRequest);
-            // 传递用户信息请求头,防止丢失
-            String userId = headers.get(SecurityConstants.DETAILS_USER_ID);
-            if (StringUtils.isNotEmpty(userId))
-            {
-                requestTemplate.header(SecurityConstants.DETAILS_USER_ID, userId);
-            }
-            String userKey = headers.get(SecurityConstants.USER_KEY);
-            if (StringUtils.isNotEmpty(userKey))
-            {
-                requestTemplate.header(SecurityConstants.USER_KEY, userKey);
-            }
-            String userName = headers.get(SecurityConstants.DETAILS_USERNAME);
-            if (StringUtils.isNotEmpty(userName))
-            {
-                requestTemplate.header(SecurityConstants.DETAILS_USERNAME, userName);
-            }
-            String authentication = headers.get(SecurityConstants.AUTHORIZATION_HEADER);
-            if (StringUtils.isNotEmpty(authentication))
-            {
-                requestTemplate.header(SecurityConstants.AUTHORIZATION_HEADER, authentication);
-            }
-
-            // 配置客户端IP
-            requestTemplate.header("X-Forwarded-For", IpUtils.getIpAddr());
-        }
-    }
+package com.sgd.common.security.feign;
+
+import java.util.Map;
+import jakarta.servlet.http.HttpServletRequest;
+import org.springframework.stereotype.Component;
+import com.sgd.common.core.constant.SecurityConstants;
+import com.sgd.common.core.utils.ServletUtils;
+import com.sgd.common.core.utils.StringUtils;
+import com.sgd.common.core.utils.ip.IpUtils;
+import feign.RequestInterceptor;
+import feign.RequestTemplate;
+
+/**
+ * feign 请求拦截器
+ * 
+ * @author ruoyi
+ */
+@Component
+public class FeignRequestInterceptor implements RequestInterceptor
+{
+    @Override
+    public void apply(RequestTemplate requestTemplate)
+    {
+        HttpServletRequest httpServletRequest = ServletUtils.getRequest();
+        if (StringUtils.isNotNull(httpServletRequest))
+        {
+            Map<String, String> headers = ServletUtils.getHeaders(httpServletRequest);
+            // 传递用户信息请求头,防止丢失
+            String userId = headers.get(SecurityConstants.DETAILS_USER_ID);
+            if (StringUtils.isNotEmpty(userId))
+            {
+                requestTemplate.header(SecurityConstants.DETAILS_USER_ID, userId);
+            }
+            String userKey = headers.get(SecurityConstants.USER_KEY);
+            if (StringUtils.isNotEmpty(userKey))
+            {
+                requestTemplate.header(SecurityConstants.USER_KEY, userKey);
+            }
+            String userName = headers.get(SecurityConstants.DETAILS_USERNAME);
+            if (StringUtils.isNotEmpty(userName))
+            {
+                requestTemplate.header(SecurityConstants.DETAILS_USERNAME, userName);
+            }
+            String authentication = headers.get(SecurityConstants.AUTHORIZATION_HEADER);
+            if (StringUtils.isNotEmpty(authentication))
+            {
+                requestTemplate.header(SecurityConstants.AUTHORIZATION_HEADER, authentication);
+            }
+
+            // 配置客户端IP
+            requestTemplate.header("X-Forwarded-For", IpUtils.getIpAddr());
+        }
+    }
 }
\ No newline at end of file
diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/handler/GlobalExceptionHandler.java b/sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/handler/GlobalExceptionHandler.java
similarity index 90%
rename from ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/handler/GlobalExceptionHandler.java
rename to sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/handler/GlobalExceptionHandler.java
index 13363d0..a7c7449 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/handler/GlobalExceptionHandler.java
+++ b/sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/handler/GlobalExceptionHandler.java
@@ -1,166 +1,166 @@
-package com.ruoyi.common.security.handler;
-
-import jakarta.servlet.http.HttpServletRequest;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.validation.BindException;
-import org.springframework.web.HttpRequestMethodNotSupportedException;
-import org.springframework.web.bind.MethodArgumentNotValidException;
-import org.springframework.web.bind.MissingPathVariableException;
-import org.springframework.web.bind.annotation.ExceptionHandler;
-import org.springframework.web.bind.annotation.RestControllerAdvice;
-import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
-import com.ruoyi.common.core.constant.HttpStatus;
-import com.ruoyi.common.core.exception.DemoModeException;
-import com.ruoyi.common.core.exception.InnerAuthException;
-import com.ruoyi.common.core.exception.ServiceException;
-import com.ruoyi.common.core.exception.auth.NotPermissionException;
-import com.ruoyi.common.core.exception.auth.NotRoleException;
-import com.ruoyi.common.core.text.Convert;
-import com.ruoyi.common.core.utils.StringUtils;
-import com.ruoyi.common.core.utils.html.EscapeUtil;
-import com.ruoyi.common.core.web.domain.AjaxResult;
-
-/**
- * 全局异常处理器
- *
- * @author ruoyi
- */
-@RestControllerAdvice
-public class GlobalExceptionHandler
-{
-    private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);
-
-    /**
-     * 权限码异常
-     */
-    @ExceptionHandler(NotPermissionException.class)
-    public AjaxResult handleNotPermissionException(NotPermissionException e, HttpServletRequest request)
-    {
-        String requestURI = request.getRequestURI();
-        log.error("请求地址'{}',权限码校验失败'{}'", requestURI, e.getMessage());
-        return AjaxResult.error(HttpStatus.FORBIDDEN, "没有访问权限,请联系管理员授权");
-    }
-
-    /**
-     * 角色权限异常
-     */
-    @ExceptionHandler(NotRoleException.class)
-    public AjaxResult handleNotRoleException(NotRoleException e, HttpServletRequest request)
-    {
-        String requestURI = request.getRequestURI();
-        log.error("请求地址'{}',角色权限校验失败'{}'", requestURI, e.getMessage());
-        return AjaxResult.error(HttpStatus.FORBIDDEN, "没有访问权限,请联系管理员授权");
-    }
-
-    /**
-     * 请求方式不支持
-     */
-    @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
-    public AjaxResult handleHttpRequestMethodNotSupported(HttpRequestMethodNotSupportedException e, HttpServletRequest request)
-    {
-        String requestURI = request.getRequestURI();
-        log.error("请求地址'{}',不支持'{}'请求", requestURI, e.getMethod());
-        return AjaxResult.error(e.getMessage());
-    }
-
-    /**
-     * 业务异常
-     */
-    @ExceptionHandler(ServiceException.class)
-    public AjaxResult handleServiceException(ServiceException e, HttpServletRequest request)
-    {
-        log.error(e.getMessage(), e);
-        Integer code = e.getCode();
-        return StringUtils.isNotNull(code) ? AjaxResult.error(code, e.getMessage()) : AjaxResult.error(e.getMessage());
-    }
-
-    /**
-     * 请求路径中缺少必需的路径变量
-     */
-    @ExceptionHandler(MissingPathVariableException.class)
-    public AjaxResult handleMissingPathVariableException(MissingPathVariableException e, HttpServletRequest request)
-    {
-        String requestURI = request.getRequestURI();
-        log.error("请求路径中缺少必需的路径变量'{}',发生系统异常.", requestURI, e);
-        return AjaxResult.error(String.format("请求路径中缺少必需的路径变量[%s]", e.getVariableName()));
-    }
-
-    /**
-     * 请求参数类型不匹配
-     */
-    @ExceptionHandler(MethodArgumentTypeMismatchException.class)
-    public AjaxResult handleMethodArgumentTypeMismatchException(MethodArgumentTypeMismatchException e, HttpServletRequest request)
-    {
-        String requestURI = request.getRequestURI();
-        String value = Convert.toStr(e.getValue());
-        if (StringUtils.isNotEmpty(value))
-        {
-            value = EscapeUtil.clean(value);
-        }
-        log.error("请求参数类型不匹配'{}',发生系统异常.", requestURI, e);
-        return AjaxResult.error(String.format("请求参数类型不匹配,参数[%s]要求类型为:'%s',但输入值为:'%s'", e.getName(), e.getRequiredType().getName(), value));
-    }
-
-    /**
-     * 拦截未知的运行时异常
-     */
-    @ExceptionHandler(RuntimeException.class)
-    public AjaxResult handleRuntimeException(RuntimeException e, HttpServletRequest request)
-    {
-        String requestURI = request.getRequestURI();
-        log.error("请求地址'{}',发生未知异常.", requestURI, e);
-        return AjaxResult.error(e.getMessage());
-    }
-
-    /**
-     * 系统异常
-     */
-    @ExceptionHandler(Exception.class)
-    public AjaxResult handleException(Exception e, HttpServletRequest request)
-    {
-        String requestURI = request.getRequestURI();
-        log.error("请求地址'{}',发生系统异常.", requestURI, e);
-        return AjaxResult.error(e.getMessage());
-    }
-
-    /**
-     * 自定义验证异常
-     */
-    @ExceptionHandler(BindException.class)
-    public AjaxResult handleBindException(BindException e)
-    {
-        log.error(e.getMessage(), e);
-        String message = e.getAllErrors().get(0).getDefaultMessage();
-        return AjaxResult.error(message);
-    }
-
-    /**
-     * 自定义验证异常
-     */
-    @ExceptionHandler(MethodArgumentNotValidException.class)
-    public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException e)
-    {
-        log.error(e.getMessage(), e);
-        String message = e.getBindingResult().getFieldError().getDefaultMessage();
-        return AjaxResult.error(message);
-    }
-
-    /**
-     * 内部认证异常
-     */
-    @ExceptionHandler(InnerAuthException.class)
-    public AjaxResult handleInnerAuthException(InnerAuthException e)
-    {
-        return AjaxResult.error(e.getMessage());
-    }
-
-    /**
-     * 演示模式异常
-     */
-    @ExceptionHandler(DemoModeException.class)
-    public AjaxResult handleDemoModeException(DemoModeException e)
-    {
-        return AjaxResult.error("演示模式,不允许操作");
-    }
-}
+package com.sgd.common.security.handler;
+
+import jakarta.servlet.http.HttpServletRequest;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.validation.BindException;
+import org.springframework.web.HttpRequestMethodNotSupportedException;
+import org.springframework.web.bind.MethodArgumentNotValidException;
+import org.springframework.web.bind.MissingPathVariableException;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
+import com.sgd.common.core.constant.HttpStatus;
+import com.sgd.common.core.exception.DemoModeException;
+import com.sgd.common.core.exception.InnerAuthException;
+import com.sgd.common.core.exception.ServiceException;
+import com.sgd.common.core.exception.auth.NotPermissionException;
+import com.sgd.common.core.exception.auth.NotRoleException;
+import com.sgd.common.core.text.Convert;
+import com.sgd.common.core.utils.StringUtils;
+import com.sgd.common.core.utils.html.EscapeUtil;
+import com.sgd.common.core.web.domain.AjaxResult;
+
+/**
+ * 全局异常处理器
+ *
+ * @author ruoyi
+ */
+@RestControllerAdvice
+public class GlobalExceptionHandler
+{
+    private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);
+
+    /**
+     * 权限码异常
+     */
+    @ExceptionHandler(NotPermissionException.class)
+    public AjaxResult handleNotPermissionException(NotPermissionException e, HttpServletRequest request)
+    {
+        String requestURI = request.getRequestURI();
+        log.error("请求地址'{}',权限码校验失败'{}'", requestURI, e.getMessage());
+        return AjaxResult.error(HttpStatus.FORBIDDEN, "没有访问权限,请联系管理员授权");
+    }
+
+    /**
+     * 角色权限异常
+     */
+    @ExceptionHandler(NotRoleException.class)
+    public AjaxResult handleNotRoleException(NotRoleException e, HttpServletRequest request)
+    {
+        String requestURI = request.getRequestURI();
+        log.error("请求地址'{}',角色权限校验失败'{}'", requestURI, e.getMessage());
+        return AjaxResult.error(HttpStatus.FORBIDDEN, "没有访问权限,请联系管理员授权");
+    }
+
+    /**
+     * 请求方式不支持
+     */
+    @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
+    public AjaxResult handleHttpRequestMethodNotSupported(HttpRequestMethodNotSupportedException e, HttpServletRequest request)
+    {
+        String requestURI = request.getRequestURI();
+        log.error("请求地址'{}',不支持'{}'请求", requestURI, e.getMethod());
+        return AjaxResult.error(e.getMessage());
+    }
+
+    /**
+     * 业务异常
+     */
+    @ExceptionHandler(ServiceException.class)
+    public AjaxResult handleServiceException(ServiceException e, HttpServletRequest request)
+    {
+        log.error(e.getMessage(), e);
+        Integer code = e.getCode();
+        return StringUtils.isNotNull(code) ? AjaxResult.error(code, e.getMessage()) : AjaxResult.error(e.getMessage());
+    }
+
+    /**
+     * 请求路径中缺少必需的路径变量
+     */
+    @ExceptionHandler(MissingPathVariableException.class)
+    public AjaxResult handleMissingPathVariableException(MissingPathVariableException e, HttpServletRequest request)
+    {
+        String requestURI = request.getRequestURI();
+        log.error("请求路径中缺少必需的路径变量'{}',发生系统异常.", requestURI, e);
+        return AjaxResult.error(String.format("请求路径中缺少必需的路径变量[%s]", e.getVariableName()));
+    }
+
+    /**
+     * 请求参数类型不匹配
+     */
+    @ExceptionHandler(MethodArgumentTypeMismatchException.class)
+    public AjaxResult handleMethodArgumentTypeMismatchException(MethodArgumentTypeMismatchException e, HttpServletRequest request)
+    {
+        String requestURI = request.getRequestURI();
+        String value = Convert.toStr(e.getValue());
+        if (StringUtils.isNotEmpty(value))
+        {
+            value = EscapeUtil.clean(value);
+        }
+        log.error("请求参数类型不匹配'{}',发生系统异常.", requestURI, e);
+        return AjaxResult.error(String.format("请求参数类型不匹配,参数[%s]要求类型为:'%s',但输入值为:'%s'", e.getName(), e.getRequiredType().getName(), value));
+    }
+
+    /**
+     * 拦截未知的运行时异常
+     */
+    @ExceptionHandler(RuntimeException.class)
+    public AjaxResult handleRuntimeException(RuntimeException e, HttpServletRequest request)
+    {
+        String requestURI = request.getRequestURI();
+        log.error("请求地址'{}',发生未知异常.", requestURI, e);
+        return AjaxResult.error(e.getMessage());
+    }
+
+    /**
+     * 系统异常
+     */
+    @ExceptionHandler(Exception.class)
+    public AjaxResult handleException(Exception e, HttpServletRequest request)
+    {
+        String requestURI = request.getRequestURI();
+        log.error("请求地址'{}',发生系统异常.", requestURI, e);
+        return AjaxResult.error(e.getMessage());
+    }
+
+    /**
+     * 自定义验证异常
+     */
+    @ExceptionHandler(BindException.class)
+    public AjaxResult handleBindException(BindException e)
+    {
+        log.error(e.getMessage(), e);
+        String message = e.getAllErrors().get(0).getDefaultMessage();
+        return AjaxResult.error(message);
+    }
+
+    /**
+     * 自定义验证异常
+     */
+    @ExceptionHandler(MethodArgumentNotValidException.class)
+    public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException e)
+    {
+        log.error(e.getMessage(), e);
+        String message = e.getBindingResult().getFieldError().getDefaultMessage();
+        return AjaxResult.error(message);
+    }
+
+    /**
+     * 内部认证异常
+     */
+    @ExceptionHandler(InnerAuthException.class)
+    public AjaxResult handleInnerAuthException(InnerAuthException e)
+    {
+        return AjaxResult.error(e.getMessage());
+    }
+
+    /**
+     * 演示模式异常
+     */
+    @ExceptionHandler(DemoModeException.class)
+    public AjaxResult handleDemoModeException(DemoModeException e)
+    {
+        return AjaxResult.error("演示模式,不允许操作");
+    }
+}
diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/interceptor/HeaderInterceptor.java b/sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/interceptor/HeaderInterceptor.java
similarity index 80%
rename from ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/interceptor/HeaderInterceptor.java
rename to sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/interceptor/HeaderInterceptor.java
index 2dcc715..3b32d7d 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/interceptor/HeaderInterceptor.java
+++ b/sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/interceptor/HeaderInterceptor.java
@@ -1,54 +1,54 @@
-package com.ruoyi.common.security.interceptor;
-
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-import org.springframework.web.method.HandlerMethod;
-import org.springframework.web.servlet.AsyncHandlerInterceptor;
-import com.ruoyi.common.core.constant.SecurityConstants;
-import com.ruoyi.common.core.context.SecurityContextHolder;
-import com.ruoyi.common.core.utils.ServletUtils;
-import com.ruoyi.common.core.utils.StringUtils;
-import com.ruoyi.common.security.auth.AuthUtil;
-import com.ruoyi.common.security.utils.SecurityUtils;
-import com.ruoyi.system.api.model.LoginUser;
-
-/**
- * 自定义请求头拦截器,将Header数据封装到线程变量中方便获取
- * 注意:此拦截器会同时验证当前用户有效期自动刷新有效期
- *
- * @author ruoyi
- */
-public class HeaderInterceptor implements AsyncHandlerInterceptor
-{
-    @Override
-    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception
-    {
-        if (!(handler instanceof HandlerMethod))
-        {
-            return true;
-        }
-
-        SecurityContextHolder.setUserId(ServletUtils.getHeader(request, SecurityConstants.DETAILS_USER_ID));
-        SecurityContextHolder.setUserName(ServletUtils.getHeader(request, SecurityConstants.DETAILS_USERNAME));
-        SecurityContextHolder.setUserKey(ServletUtils.getHeader(request, SecurityConstants.USER_KEY));
-
-        String token = SecurityUtils.getToken();
-        if (StringUtils.isNotEmpty(token))
-        {
-            LoginUser loginUser = AuthUtil.getLoginUser(token);
-            if (StringUtils.isNotNull(loginUser))
-            {
-                AuthUtil.verifyLoginUserExpire(loginUser);
-                SecurityContextHolder.set(SecurityConstants.LOGIN_USER, loginUser);
-            }
-        }
-        return true;
-    }
-
-    @Override
-    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
-            throws Exception
-    {
-        SecurityContextHolder.remove();
-    }
-}
+package com.sgd.common.security.interceptor;
+
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.web.method.HandlerMethod;
+import org.springframework.web.servlet.AsyncHandlerInterceptor;
+import com.sgd.common.core.constant.SecurityConstants;
+import com.sgd.common.core.context.SecurityContextHolder;
+import com.sgd.common.core.utils.ServletUtils;
+import com.sgd.common.core.utils.StringUtils;
+import com.sgd.common.security.auth.AuthUtil;
+import com.sgd.common.security.utils.SecurityUtils;
+import com.sgd.system.api.model.LoginUser;
+
+/**
+ * 自定义请求头拦截器,将Header数据封装到线程变量中方便获取
+ * 注意:此拦截器会同时验证当前用户有效期自动刷新有效期
+ *
+ * @author ruoyi
+ */
+public class HeaderInterceptor implements AsyncHandlerInterceptor
+{
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception
+    {
+        if (!(handler instanceof HandlerMethod))
+        {
+            return true;
+        }
+
+        SecurityContextHolder.setUserId(ServletUtils.getHeader(request, SecurityConstants.DETAILS_USER_ID));
+        SecurityContextHolder.setUserName(ServletUtils.getHeader(request, SecurityConstants.DETAILS_USERNAME));
+        SecurityContextHolder.setUserKey(ServletUtils.getHeader(request, SecurityConstants.USER_KEY));
+
+        String token = SecurityUtils.getToken();
+        if (StringUtils.isNotEmpty(token))
+        {
+            LoginUser loginUser = AuthUtil.getLoginUser(token);
+            if (StringUtils.isNotNull(loginUser))
+            {
+                AuthUtil.verifyLoginUserExpire(loginUser);
+                SecurityContextHolder.set(SecurityConstants.LOGIN_USER, loginUser);
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
+            throws Exception
+    {
+        SecurityContextHolder.remove();
+    }
+}
diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/DictUtils.java b/sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/utils/DictUtils.java
similarity index 84%
rename from ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/DictUtils.java
rename to sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/utils/DictUtils.java
index 2c8d18d..6bd07cb 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/DictUtils.java
+++ b/sgd-common/sgd-common-security/src/main/java/com/sgd/common/security/utils/DictUtils.java
@@ -1,75 +1,75 @@
-package com.ruoyi.common.security.utils;
-
-import java.util.Collection;
-import java.util.List;
-import com.alibaba.fastjson2.JSONArray;
-import com.ruoyi.common.core.constant.CacheConstants;
-import com.ruoyi.common.core.utils.SpringUtils;
-import com.ruoyi.common.core.utils.StringUtils;
-import com.ruoyi.common.redis.service.RedisService;
-import com.ruoyi.system.api.domain.SysDictData;
-
-/**
- * 字典工具类
- * 
- * @author ruoyi
- */
-public class DictUtils
-{
-    /**
-     * 设置字典缓存
-     * 
-     * @param key 参数键
-     * @param dictDatas 字典数据列表
-     */
-    public static void setDictCache(String key, List<SysDictData> dictDatas)
-    {
-        SpringUtils.getBean(RedisService.class).setCacheObject(getCacheKey(key), dictDatas);
-    }
-
-    /**
-     * 获取字典缓存
-     * 
-     * @param key 参数键
-     * @return dictDatas 字典数据列表
-     */
-    public static List<SysDictData> getDictCache(String key)
-    {
-        JSONArray arrayCache = SpringUtils.getBean(RedisService.class).getCacheObject(getCacheKey(key));
-        if (StringUtils.isNotNull(arrayCache))
-        {
-            return arrayCache.toList(SysDictData.class);
-        }
-        return null;
-    }
-
-    /**
-     * 删除指定字典缓存
-     * 
-     * @param key 字典键
-     */
-    public static void removeDictCache(String key)
-    {
-        SpringUtils.getBean(RedisService.class).deleteObject(getCacheKey(key));
-    }
-
-    /**
-     * 清空字典缓存
-     */
-    public static void clearDictCache()
-    {
-        Collection<String> keys = SpringUtils.getBean(RedisService.class).keys(CacheConstants.SYS_DICT_KEY + "*");
-        SpringUtils.getBean(RedisService.class).deleteObject(keys);
-    }
-
-    /**
-     * 设置cache key
-     * 
-     * @param configKey 参数键
-     * @return 缓存键key
-     */
-    public static String getCacheKey(String configKey)
-    {
-        return CacheConstants.SYS_DICT_KEY + configKey;
-    }
-}
+package com.sgd.common.security.utils;
+
+import java.util.Collection;
+import java.util.List;
+import com.alibaba.fastjson2.JSONArray;
+import com.sgd.common.core.constant.CacheConstants;
+import com.sgd.common.core.utils.SpringUtils;
+import com.sgd.common.core.utils.StringUtils;
+import com.sgd.common.redis.service.RedisService;
+import com.sgd.system.api.domain.SysDictData;
+
+/**
+ * 字典工具类
+ * 
+ * @author ruoyi
+ */
+public class DictUtils
+{
+    /**
+     * 设置字典缓存
+     * 
+     * @param key 参数键
+     * @param dictDatas 字典数据列表
+     */
+    public static void setDictCache(String key, List<SysDictData> dictDatas)
+    {
+        SpringUtils.getBean(RedisService.class).setCacheObject(getCacheKey(key), dictDatas);
+    }
+
+    /**
+     * 获取字典缓存
+     * 
+     * @param key 参数键
+     * @return dictDatas 字典数据列表
+     */
+    public static List<SysDictData> getDictCache(String key)
+    {
+        JSONArray arrayCache = SpringUtils.getBean(RedisService.class).getCacheObject(getCacheKey(key));
+        if (StringUtils.isNotNull(arrayCache))
+        {
+            return arrayCache.toList(SysDictData.class);
+        }
+        return null;
+    }
+
+    /**
+     * 删除指定字典缓存
+     * 
+     * @param key 字典键
+     */
+    public static void removeDictCache(String key)
+    {
+        SpringUtils.getBean(RedisService.class).deleteObject(getCacheKey(key));
+    }
+
+    /**
+     * 清空字典缓存
+     */
+    public static void clearDictCache()
+    {
+        Collection<String> keys = SpringUtils.getBean(RedisService.class).keys(CacheConstants.SYS_DICT_KEY + "*");
+        SpringUtils.getBean(RedisService.class).deleteObject(keys);
+    }
+
+    /**
+     * 设置cache key
+     * 
+     * @param configKey 参数键
+     * @return 缓存键key
+     */
+    public static String getCacheKey(String configKey)
+    {
+        return CacheConstants.SYS_DICT_KEY + configKey;
+    }
+}

--
Gitblit v1.9.3