Переглянути джерело

bump: 发布1.7.1

details see: https://helio.uncarbon.cc/#/i18n/zh-CN/appendix/change-log
Uncarbon 3 роки тому
батько
коміт
009e62c194

+ 1 - 1
helio-core/pom.xml

@@ -60,7 +60,7 @@
             <artifactId>transmittable-thread-local</artifactId>
         </dependency>
 
-        <!-- hutool yyds! -->
+        <!-- hutool -->
         <dependency>
             <groupId>cn.hutool</groupId>
             <artifactId>hutool-all</artifactId>

+ 12 - 4
helio-core/src/main/java/cc/uncarbon/framework/core/context/UserContext.java

@@ -2,16 +2,17 @@ package cc.uncarbon.framework.core.context;
 
 import cc.uncarbon.framework.core.enums.HelioBaseEnum;
 import io.swagger.annotations.ApiModelProperty;
-import java.io.Serializable;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
 import lombok.experimental.SuperBuilder;
 
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 /**
  * 当前用户上下文对象
  *
@@ -37,9 +38,16 @@ public class UserContext implements Serializable {
     @ApiModelProperty(value = "用户手机号")
     private String userPhoneNo;
 
+    /**
+     * @deprecated since 1.7.1, replaced by "userTypeStr"
+     */
     @ApiModelProperty(value = "用户类型")
+    @Deprecated
     private HelioBaseEnum<?> userType;
 
+    @ApiModelProperty(value = "用户类型")
+    private String userTypeStr;
+
     @ApiModelProperty(value = "用户拥有角色ID", notes = "后台管理使用", example = "[1, 2, 3]")
     private Set<Long> rolesIds;
 

+ 3 - 3
helio-starter-knife4j/src/main/java/cc/uncarbon/framework/knife4j/config/HelioKnife4jAutoConfiguration.java

@@ -2,9 +2,9 @@ package cc.uncarbon.framework.knife4j.config;
 
 
 import cc.uncarbon.framework.core.props.HelioProperties;
-import cn.hutool.core.collection.CollUtil;
 import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Value;
@@ -57,8 +57,8 @@ public class HelioKnife4jAutoConfiguration {
                 .paths(PathSelectors.any())
                 .build()
                 // 在调试页上附加请求头
-                .securityContexts(CollUtil.newArrayList(this.securityContext()))
-                .securitySchemes(CollUtil.newArrayList(this.apiKeyOfToken()))
+                .securityContexts(Collections.singletonList(this.securityContext()))
+                .securitySchemes(Collections.singletonList(this.apiKeyOfToken()))
                 ;
     }
 

+ 25 - 15
helio-starter-satoken/src/main/java/cc/uncarbon/framework/satoken/interceptor/DefaultSaTokenParseInterceptor.java

@@ -5,6 +5,7 @@ import cc.uncarbon.framework.core.context.TenantContextHolder;
 import cc.uncarbon.framework.core.context.UserContext;
 import cc.uncarbon.framework.core.context.UserContextHolder;
 import cc.uncarbon.framework.satoken.util.IPUtil;
+import cn.dev33.satoken.session.SaSession;
 import cn.dev33.satoken.stp.StpUtil;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -14,7 +15,7 @@ import org.springframework.web.servlet.AsyncHandlerInterceptor;
 import org.springframework.web.servlet.resource.ResourceHttpRequestHandler;
 
 /**
- * 从请求头解析用户信息,并赋值到上下文
+ * 从请求头解析用户信息,并赋值到上下文;默认用于C端用户的鉴权
  *
  * @author Uncarbon
  */
@@ -30,23 +31,32 @@ public class DefaultSaTokenParseInterceptor implements AsyncHandlerInterceptor {
 
         // SA-Token 会自动从请求头中解析 token,所以这里可以直接拿到对应 session,从而取出业务字段
         if (StpUtil.isLogin()) {
-            UserContext userContext = (UserContext) StpUtil.getSession().get(UserContext.CAMEL_NAME);
-
-            // 获取用户公网IP
-            userContext.setClientIP(IPUtil.getClientIPAddress(request));
-            UserContextHolder.setUserContext(userContext);
-
-            log.debug("[SA-Token] 从请求头解析出用户上下文 >> {}", userContext);
-
-            // 赋值租户上下文
-            TenantContext tenantContext = (TenantContext) StpUtil.getSession().get(TenantContext.CAMEL_NAME);
-            TenantContextHolder.setTenantContext(tenantContext);
-
+            setContextsFromSaSession(StpUtil.getSession(), request);
+            log.debug("[SA-Token] 从请求头解析出用户上下文 >> {}", UserContextHolder.getUserContext());
         } else {
-            UserContextHolder.setUserContext(null);
-            TenantContextHolder.setTenantContext(null);
+            UserContextHolder.clear();
+            TenantContextHolder.clear();
         }
 
         return true;
     }
+
+    /**
+     * 自 SaSession 更新当前线程用户、租户上下文
+     *
+     * @param session 会话对象
+     * @param request ServletRequest 对象
+     */
+    public static void setContextsFromSaSession(SaSession session, HttpServletRequest request) {
+        // 赋值用户上下文
+        UserContext userContext = (UserContext) session.get(UserContext.CAMEL_NAME);
+
+        // 获取用户公网IP
+        userContext.setClientIP(IPUtil.getClientIPAddress(request));
+        UserContextHolder.setUserContext(userContext);
+
+        // 赋值租户上下文
+        TenantContext tenantContext = (TenantContext) session.get(TenantContext.CAMEL_NAME);
+        TenantContextHolder.setTenantContext(tenantContext);
+    }
 }

+ 2 - 1
helio-starter-web/pom.xml

@@ -39,7 +39,8 @@
 
         <dependency>
             <groupId>cn.dev33</groupId>
-            <artifactId>sa-token-spring-boot-starter</artifactId>
+            <artifactId>sa-token-core</artifactId>
+            <version>${sa-token.version}</version>
         </dependency>
 
         <dependency>

+ 3 - 0
helio-starter-web/src/main/java/cc/uncarbon/framework/web/config/AdviceExceptionAutoConfiguration.java

@@ -13,6 +13,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.boot.autoconfigure.AutoConfiguration;
+import org.springframework.core.annotation.Order;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
@@ -36,6 +37,8 @@ import org.springframework.web.servlet.NoHandlerFoundException;
 @RestController
 @ControllerAdvice
 @AutoConfiguration
+// 主动标注为最低优先级,便于覆盖
+@Order
 public class AdviceExceptionAutoConfiguration {
 
     protected static final MediaType MEDIA_TYPE = new MediaType("application", "json", StandardCharsets.UTF_8);

+ 10 - 10
pom.xml

@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
-        <version>2.7.3</version>
+        <version>2.7.4</version>
         <relativePath/>
     </parent>
 
@@ -33,29 +33,29 @@
 
     <properties>
         <!-- core versions -->
-        <revision>1.7.0</revision>
+        <revision>1.7.1</revision>
         <helio-starters.version>${revision}</helio-starters.version>
         <!-- JDK8则改为'1.8'  JDK11则改为'11' -->
         <java.version>1.8</java.version>
         <!-- 若变更Spring Boot版本, 上面parent依赖版本也要变 -->
-        <spring-boot.version>2.7.3</spring-boot.version>
+        <spring-boot.version>2.7.4</spring-boot.version>
 
 
         <!-- Spring Cloud versions -->
         <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies -->
-        <spring-cloud.version>2021.0.3</spring-cloud.version>
-        <spring-cloud-starter-bootstrap.version>3.0.3</spring-cloud-starter-bootstrap.version>
+        <spring-cloud.version>2021.0.4</spring-cloud.version>
+        <spring-cloud-starter-bootstrap.version>3.1.4</spring-cloud-starter-bootstrap.version>
 
         <!-- Spring Cloud Alibaba versions -->
-        <spring-cloud-alibaba.version>2021.0.1.0</spring-cloud-alibaba.version>
-        <dubbo.version>3.1.0</dubbo.version>
-        <seata.vesion>1.4.2</seata.vesion>
+        <spring-cloud-alibaba.version>2021.0.4.0</spring-cloud-alibaba.version>
+        <dubbo.version>3.1.1</dubbo.version>
+        <seata.vesion>1.5.2</seata.vesion>
         <nacos-client.vesion>2.1.1</nacos-client.vesion>
 
 
         <!-- 3rd-party versions -->
-        <hutool.version>5.8.5</hutool.version>
-        <sa-token.version>1.30.0</sa-token.version>
+        <hutool.version>5.8.7</hutool.version>
+        <sa-token.version>1.31.0</sa-token.version>
         <transmittable-thread-local.version>2.12.1</transmittable-thread-local.version>
         <!-- 如果 mp 较新版存在问题,可以回退至 3.4.3.4 试试  -->
         <mybatis-plus.version>3.5.2</mybatis-plus.version>