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

zihaoxiang pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git


The following commit(s) were added to refs/heads/dev by this push:
     new bf5aeb107d [Fix-16627] [dolphinscheduler-api] 
LoginHandlerInterceptor.preHandle check session without expire time check 
(#16989)
bf5aeb107d is described below

commit bf5aeb107d22f1ea0575b30669a10cbf6d3f0529
Author: Wenjun Ruan <[email protected]>
AuthorDate: Tue Feb 4 17:12:02 2025 +0800

    [Fix-16627] [dolphinscheduler-api] LoginHandlerInterceptor.preHandle check 
session without expire time check (#16989)
---
 .../api/interceptor/LoginHandlerInterceptor.java    |  6 ++++--
 .../api/security/impl/AbstractAuthenticator.java    |  6 +++++-
 .../security/impl/pwd/PasswordAuthenticator.java    |  4 +++-
 .../api/service/impl/SessionServiceImpl.java        |  2 +-
 .../api/controller/LoginControllerTest.java         | 21 +++++++++++++++++++++
 5 files changed, 34 insertions(+), 5 deletions(-)

diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/interceptor/LoginHandlerInterceptor.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/interceptor/LoginHandlerInterceptor.java
index cc1928404b..49eacaa59c 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/interceptor/LoginHandlerInterceptor.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/interceptor/LoginHandlerInterceptor.java
@@ -96,8 +96,10 @@ public class LoginHandlerInterceptor implements 
HandlerInterceptor {
     }
 
     @Override
-    public void postHandle(HttpServletRequest request, HttpServletResponse 
response, Object handler,
-                           ModelAndView modelAndView) throws Exception {
+    public void postHandle(HttpServletRequest request,
+                           HttpServletResponse response,
+                           Object handler,
+                           ModelAndView modelAndView) {
         ThreadLocalContext.getTimezoneThreadLocal().remove();
 
         int code = response.getStatus();
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/security/impl/AbstractAuthenticator.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/security/impl/AbstractAuthenticator.java
index 7b9c3f5a43..b840a02796 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/security/impl/AbstractAuthenticator.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/security/impl/AbstractAuthenticator.java
@@ -119,10 +119,14 @@ public abstract class AbstractAuthenticator implements 
Authenticator {
                 sessionId = cookie.getValue();
             }
         }
-        Session session = sessionService.getSession(sessionId);
+        final Session session = sessionService.getSession(sessionId);
         if (session == null) {
             return null;
         }
+        if (sessionService.isSessionExpire(session)) {
+            sessionService.expireSession(session.getUserId());
+            return null;
+        }
         // get user object from session
         return userService.queryUser(session.getUserId());
     }
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/security/impl/pwd/PasswordAuthenticator.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/security/impl/pwd/PasswordAuthenticator.java
index 86c419a605..9770041606 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/security/impl/pwd/PasswordAuthenticator.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/security/impl/pwd/PasswordAuthenticator.java
@@ -20,10 +20,12 @@ package org.apache.dolphinscheduler.api.security.impl.pwd;
 import org.apache.dolphinscheduler.api.security.impl.AbstractAuthenticator;
 import org.apache.dolphinscheduler.dao.entity.User;
 
+import lombok.NonNull;
+
 public class PasswordAuthenticator extends AbstractAuthenticator {
 
     @Override
-    public User login(String userName, String password) {
+    public User login(@NonNull String userName, String password) {
         return userService.queryUser(userName, password);
     }
 }
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/SessionServiceImpl.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/SessionServiceImpl.java
index 79816c58d9..a3571eb19e 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/SessionServiceImpl.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/SessionServiceImpl.java
@@ -94,7 +94,7 @@ public class SessionServiceImpl extends BaseServiceImpl 
implements SessionServic
 
     @Override
     public boolean isSessionExpire(Session session) {
-        return System.currentTimeMillis() - 
session.getLastLoginTime().getTime() <= Constants.SESSION_TIME_OUT * 1000;
+        return System.currentTimeMillis() - 
session.getLastLoginTime().getTime() >= Constants.SESSION_TIME_OUT * 1000;
     }
 
 }
diff --git 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/LoginControllerTest.java
 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/LoginControllerTest.java
index bad2825145..c954f22498 100644
--- 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/LoginControllerTest.java
+++ 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/LoginControllerTest.java
@@ -27,7 +27,12 @@ import org.apache.dolphinscheduler.api.enums.Status;
 import org.apache.dolphinscheduler.api.utils.Result;
 import org.apache.dolphinscheduler.common.constants.Constants;
 import org.apache.dolphinscheduler.common.utils.JSONUtils;
+import org.apache.dolphinscheduler.dao.entity.Session;
+import org.apache.dolphinscheduler.dao.repository.SessionDao;
 
+import org.apache.http.HttpStatus;
+
+import java.util.Date;
 import java.util.Map;
 
 import javax.servlet.http.Cookie;
@@ -36,6 +41,7 @@ import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
 import org.springframework.mock.web.MockHttpServletResponse;
 import org.springframework.test.web.servlet.MvcResult;
@@ -49,6 +55,9 @@ public class LoginControllerTest extends 
AbstractControllerTest {
 
     private static final Logger logger = 
LoggerFactory.getLogger(LoginControllerTest.class);
 
+    @Autowired
+    private SessionDao sessionDao;
+
     @Test
     public void testLogin() throws Exception {
         MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
@@ -85,6 +94,18 @@ public class LoginControllerTest extends 
AbstractControllerTest {
         logger.info(mvcResult.getResponse().getContentAsString());
     }
 
+    @Test
+    void testSignOutWithExpireSession() throws Exception {
+        final Session session = sessionDao.queryById(sessionId);
+        session.setLastLoginTime(new Date(System.currentTimeMillis() - 
Constants.SESSION_TIME_OUT * 1000 - 1));
+        sessionDao.updateById(session);
+
+        mockMvc.perform(post("/signOut")
+                .header("sessionId", sessionId))
+                .andExpect(status().is(HttpStatus.SC_UNAUTHORIZED))
+                .andReturn();
+    }
+
     @Test
     void testClearCookie() throws Exception {
         MvcResult mvcResult = mockMvc.perform(delete("/cookies")

Reply via email to