You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by xx...@apache.org on 2022/12/07 03:37:55 UTC

[kylin] 01/02: [KYLIN-5310] fix spring session timeout config not work issue when the session store-type is jdbc

This is an automated email from the ASF dual-hosted git repository.

xxyu pushed a commit to branch kylin5
in repository https://gitbox.apache.org/repos/asf/kylin.git

commit ea2efd9e7342affeb8db7729e5c6006c5833e8ef
Author: cli2 <ss...@pku.edu.cn>
AuthorDate: Thu Dec 1 10:53:13 2022 +0800

    [KYLIN-5310] fix spring session timeout config not work issue when the session store-type is jdbc
---
 .../java/org/apache/kylin/common/KylinConfigBase.java    |  5 +++++
 .../apache/kylin/rest/controller/NUserController.java    | 16 ++++++++++++++++
 2 files changed, 21 insertions(+)

diff --git a/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java b/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
index dec30004b8..c1a6e84bb3 100644
--- a/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
+++ b/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
@@ -2931,6 +2931,11 @@ public abstract class KylinConfigBase implements Serializable {
         return getOptional("spring.session.store-type", "");
     }
 
+
+    public int getJdbcSessionMaxInactiveInterval() {
+        return Integer.parseInt(getOptional("spring.session.timeout", "3600"));
+    }
+
     public int getCapacitySampleRows() {
         return Integer.parseInt(getOptional("kylin.capacity.sample-rows", "1000"));
     }
diff --git a/src/metadata-server/src/main/java/org/apache/kylin/rest/controller/NUserController.java b/src/metadata-server/src/main/java/org/apache/kylin/rest/controller/NUserController.java
index 5321112578..4dee368683 100644
--- a/src/metadata-server/src/main/java/org/apache/kylin/rest/controller/NUserController.java
+++ b/src/metadata-server/src/main/java/org/apache/kylin/rest/controller/NUserController.java
@@ -105,6 +105,10 @@ import com.google.common.collect.Sets;
 import io.swagger.annotations.ApiOperation;
 import lombok.SneakyThrows;
 import lombok.val;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
 
 @Controller
 @RequestMapping(value = "/api/user", produces = { HTTP_VND_APACHE_KYLIN_JSON })
@@ -475,6 +479,7 @@ public class NUserController extends NBasicController implements ApplicationList
     @ResponseBody
     public EnvelopeResponse<UserDetails> authenticate() {
         EnvelopeResponse<UserDetails> response = authenticatedUser();
+        checkSessionStoreType(KylinConfig.getInstanceFromEnv());
         logger.debug("User login: {}", response.getData());
         return response;
     }
@@ -633,4 +638,15 @@ public class NUserController extends NBasicController implements ApplicationList
             throw new KylinException(REPEATED_PARAMETER, "authorities");
         }
     }
+
+    private void checkSessionStoreType(KylinConfig env) {
+        String type = env.getSpringStoreType();
+        HttpServletRequest request =
+                ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes()))
+                        .getRequest();
+        //todo other session store-type
+        if (type.equals("jbdc")) {
+            request.getSession().setMaxInactiveInterval(env.getJdbcSessionMaxInactiveInterval());
+        }
+    }
 }