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

benjobs pushed a commit to branch dev-2.1.3
in repository https://gitbox.apache.org/repos/asf/incubator-streampark.git


The following commit(s) were added to refs/heads/dev-2.1.3 by this push:
     new 151db6d61 [Improve] shiro bug fixed
151db6d61 is described below

commit 151db6d6119121f0d3cfee1080b6992640025669
Author: benjobs <[email protected]>
AuthorDate: Sat Mar 16 17:48:15 2024 +0800

    [Improve] shiro bug fixed
---
 .../console/base/domain/ResponseCode.java          |  4 +-
 .../base/exception/AbstractApiException.java       | 10 ++---
 .../base/handler/GlobalExceptionHandler.java       | 13 +++---
 .../console/core/annotation/ApiAccess.java         |  4 +-
 .../console/core/aspect/StreamParkAspect.java      |  8 ++--
 .../enums/AuthenticationType.java}                 | 22 ++++++----
 .../console/system/authentication/JWTFilter.java   | 19 ++++++---
 .../console/system/authentication/JWTToken.java    |  5 ++-
 .../console/system/authentication/JWTUtil.java     | 47 +++++++++++++---------
 .../console/system/authentication/ShiroRealm.java  | 27 +++++++++----
 .../system/controller/AccessTokenController.java   |  9 +----
 .../system/controller/PassportController.java      | 24 +++++++++--
 .../console/system/entity/AccessToken.java         |  3 --
 .../console/system/service/AccessTokenService.java |  2 +-
 .../service/impl/AccessTokenServiceImpl.java       | 19 +++------
 .../resources/mapper/system/AccessTokenMapper.xml  |  1 -
 .../core/service/AccessTokenServiceTest.java       |  3 +-
 .../console/system/authentication/JWTTest.java     |  2 +
 .../src/api/system/model/tokenModel.ts             |  2 -
 .../src/locales/lang/en/system/token.ts            |  1 -
 .../src/locales/lang/zh-CN/system/token.ts         |  1 -
 .../src/views/system/token/token.data.ts           | 14 -------
 22 files changed, 127 insertions(+), 113 deletions(-)

diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/domain/ResponseCode.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/domain/ResponseCode.java
index 65ce33c9c..8c617031f 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/domain/ResponseCode.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/domain/ResponseCode.java
@@ -21,10 +21,12 @@ public interface ResponseCode {
 
   Long CODE_SUCCESS = 200L;
 
-  Long CODE_FAIL = 500L;
+  Long CODE_UNAUTHORIZED = 401L;
 
   Long CODE_FORBIDDEN = 403L;
 
+  Long CODE_FAIL = 500L;
+
   Long CODE_FAIL_ALERT = 501L;
 
   Long CODE_FAIL_DETAIL = 502L;
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/exception/AbstractApiException.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/exception/AbstractApiException.java
index 0d602bbdc..026a81a67 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/exception/AbstractApiException.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/exception/AbstractApiException.java
@@ -26,24 +26,24 @@ package org.apache.streampark.console.base.exception;
  */
 public abstract class AbstractApiException extends RuntimeException {
 
-  private final long responseCode;
+  private final Long responseCode;
 
-  protected AbstractApiException(String message, long responseCode) {
+  protected AbstractApiException(String message, Long responseCode) {
     super(message);
     this.responseCode = responseCode;
   }
 
-  protected AbstractApiException(Throwable cause, long responseCode) {
+  protected AbstractApiException(Throwable cause, Long responseCode) {
     super(cause);
     this.responseCode = responseCode;
   }
 
-  protected AbstractApiException(String message, Throwable cause, long 
responseCode) {
+  protected AbstractApiException(String message, Throwable cause, Long 
responseCode) {
     super(message, cause);
     this.responseCode = responseCode;
   }
 
-  public long getResponseCode() {
+  public Long getResponseCode() {
     return responseCode;
   }
 }
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/handler/GlobalExceptionHandler.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/handler/GlobalExceptionHandler.java
index e4a57cfa0..323d45458 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/handler/GlobalExceptionHandler.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/handler/GlobalExceptionHandler.java
@@ -22,6 +22,7 @@ import org.apache.streampark.console.base.domain.RestResponse;
 import org.apache.streampark.console.base.exception.AbstractApiException;
 
 import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.authz.AuthorizationException;
 import org.apache.shiro.authz.UnauthorizedException;
 
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
@@ -31,7 +32,6 @@ import org.springframework.core.annotation.Order;
 import org.springframework.http.HttpStatus;
 import org.springframework.validation.BindException;
 import org.springframework.validation.FieldError;
-import org.springframework.web.HttpRequestMethodNotSupportedException;
 import org.springframework.web.bind.annotation.ExceptionHandler;
 import org.springframework.web.bind.annotation.ResponseStatus;
 import org.springframework.web.bind.annotation.RestControllerAdvice;
@@ -52,15 +52,14 @@ public class GlobalExceptionHandler {
   @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
   public RestResponse handleException(Exception e) {
     log.info("Internal server error:", e);
+    log.info(e.getCause().getClass().getName());
     return RestResponse.fail("internal server error: " + e.getMessage(), 
ResponseCode.CODE_FAIL);
   }
 
-  @ExceptionHandler(value = HttpRequestMethodNotSupportedException.class)
-  @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
-  public RestResponse handleException(HttpRequestMethodNotSupportedException 
e) {
-    log.info("not supported request method,exception:{}", e.getMessage());
-    return RestResponse.fail(
-        "not supported request method,exception:" + e.getMessage(), 
ResponseCode.CODE_FAIL);
+  @ExceptionHandler(value = AuthorizationException.class)
+  @ResponseStatus(HttpStatus.UNAUTHORIZED)
+  public RestResponse handleException(AuthorizationException e) {
+    return RestResponse.fail("Unauthenticated", 
ResponseCode.CODE_UNAUTHORIZED);
   }
 
   @ExceptionHandler(value = AbstractApiException.class)
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/annotation/ApiAccess.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/annotation/ApiAccess.java
index 5326c4dd8..0ef500cff 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/annotation/ApiAccess.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/annotation/ApiAccess.java
@@ -24,6 +24,4 @@ import java.lang.annotation.Target;
 
 @Target(ElementType.METHOD)
 @Retention(RetentionPolicy.RUNTIME)
-public @interface ApiAccess {
-  boolean value() default true;
-}
+public @interface ApiAccess {}
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/aspect/StreamParkAspect.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/aspect/StreamParkAspect.java
index f9f2e6372..c9bc1ee01 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/aspect/StreamParkAspect.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/aspect/StreamParkAspect.java
@@ -49,8 +49,6 @@ import 
org.springframework.expression.spel.standard.SpelExpressionParser;
 import org.springframework.expression.spel.support.StandardEvaluationContext;
 import org.springframework.stereotype.Component;
 
-import java.util.Objects;
-
 @Slf4j
 @Component
 @Aspect
@@ -74,10 +72,10 @@ public class StreamParkAspect {
     log.debug("restResponse aspect, method:{}", methodSignature.getName());
     Boolean isApi =
         (Boolean) 
SecurityUtils.getSubject().getSession().getAttribute(AccessToken.IS_API_TOKEN);
-    if (Objects.nonNull(isApi) && isApi) {
+    if (isApi != null && isApi) {
       ApiAccess apiAccess = 
methodSignature.getMethod().getAnnotation(ApiAccess.class);
-      if (Objects.isNull(apiAccess) || !apiAccess.value()) {
-        throw new ApiAlertException("api accessToken authentication failed!");
+      if (apiAccess == null) {
+        throw new ApiAlertException("current api unsupported!");
       }
     }
     return (RestResponse) joinPoint.proceed();
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/domain/ResponseCode.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/enums/AuthenticationType.java
similarity index 65%
copy from 
streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/domain/ResponseCode.java
copy to 
streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/enums/AuthenticationType.java
index 65ce33c9c..1413664ad 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/domain/ResponseCode.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/enums/AuthenticationType.java
@@ -14,18 +14,26 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.streampark.console.core.enums;
 
-package org.apache.streampark.console.base.domain;
+import java.util.Arrays;
 
-public interface ResponseCode {
+public enum AuthenticationType {
+  SIGN(1),
 
-  Long CODE_SUCCESS = 200L;
+  OPENAPI(2);
 
-  Long CODE_FAIL = 500L;
+  private final Integer value;
 
-  Long CODE_FORBIDDEN = 403L;
+  AuthenticationType(int value) {
+    this.value = value;
+  }
 
-  Long CODE_FAIL_ALERT = 501L;
+  public int get() {
+    return this.value;
+  }
 
-  Long CODE_FAIL_DETAIL = 502L;
+  public static AuthenticationType of(Integer value) {
+    return Arrays.stream(values()).filter((x) -> x.value == 
value).findFirst().orElse(null);
+  }
 }
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/authentication/JWTFilter.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/authentication/JWTFilter.java
index 92ae2416f..6a597a1ec 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/authentication/JWTFilter.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/authentication/JWTFilter.java
@@ -20,6 +20,7 @@ package org.apache.streampark.console.system.authentication;
 import org.apache.streampark.console.base.properties.ShiroProperties;
 import org.apache.streampark.console.base.util.SpringContextUtils;
 import org.apache.streampark.console.base.util.WebUtils;
+import org.apache.streampark.console.core.enums.AuthenticationType;
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.authz.UnauthorizedException;
@@ -76,14 +77,20 @@ public class JWTFilter extends 
BasicHttpAuthenticationFilter {
   protected boolean executeLogin(ServletRequest request, ServletResponse 
response) {
     HttpServletRequest httpServletRequest = (HttpServletRequest) request;
     String token = httpServletRequest.getHeader(TOKEN);
-    JWTToken jwtToken = new JWTToken(WebUtils.decryptToken(token));
-    try {
-      getSubject(request, response).login(jwtToken);
-      return true;
-    } catch (Exception e) {
-      log.error("Error in executeLogin, token {}, jwtToken {}", token, 
jwtToken, e);
+    AuthenticationType type = 
JWTUtil.getAuthType(WebUtils.decryptToken(token));
+    if (type == null) {
       return false;
     }
+    if (type == AuthenticationType.OPENAPI) {
+      JWTToken jwtToken = new JWTToken(WebUtils.decryptToken(token));
+      try {
+        getSubject(request, response).login(jwtToken);
+        return true;
+      } catch (Exception e) {
+        return false;
+      }
+    }
+    return true;
   }
 
   /** cross-domain support */
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/authentication/JWTToken.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/authentication/JWTToken.java
index 4e00e70ce..2be2039bb 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/authentication/JWTToken.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/authentication/JWTToken.java
@@ -33,13 +33,16 @@ public class JWTToken implements AuthenticationToken {
 
   private String expireAt;
 
+  private int signType;
+
   public JWTToken(String token) {
     this.token = token;
   }
 
-  public JWTToken(String token, String expireAt) {
+  public JWTToken(String token, String expireAt, int signType) {
     this.token = token;
     this.expireAt = expireAt;
+    this.signType = signType;
   }
 
   @Override
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/authentication/JWTUtil.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/authentication/JWTUtil.java
index f1b052a23..cda382e9e 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/authentication/JWTUtil.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/authentication/JWTUtil.java
@@ -19,6 +19,7 @@ package org.apache.streampark.console.system.authentication;
 
 import org.apache.streampark.console.base.properties.ShiroProperties;
 import org.apache.streampark.console.base.util.SpringContextUtils;
+import org.apache.streampark.console.core.enums.AuthenticationType;
 
 import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.shiro.authc.AuthenticationException;
@@ -26,7 +27,6 @@ import org.apache.shiro.authc.AuthenticationException;
 import com.auth0.jwt.JWT;
 import com.auth0.jwt.JWTVerifier;
 import com.auth0.jwt.algorithms.Algorithm;
-import com.auth0.jwt.exceptions.JWTDecodeException;
 import com.auth0.jwt.exceptions.TokenExpiredException;
 import com.auth0.jwt.interfaces.DecodedJWT;
 import lombok.extern.slf4j.Slf4j;
@@ -56,7 +56,6 @@ public class JWTUtil {
     } catch (TokenExpiredException e) {
       throw new AuthenticationException(e.getMessage());
     } catch (Exception e) {
-      log.error("token is invalid:{} , e:{}", e.getMessage(), e.getClass());
       return false;
     }
   }
@@ -66,18 +65,29 @@ public class JWTUtil {
     try {
       DecodedJWT jwt = JWT.decode(token);
       return jwt.getClaim("userName").asString();
-    } catch (JWTDecodeException e) {
-      log.error("error:{}", e.getMessage());
+    } catch (Exception e) {
       return null;
     }
   }
 
   public static Long getUserId(String token) {
+    if (token == null) {
+      throw new AuthenticationException("Unauthorized");
+    }
     try {
       DecodedJWT jwt = JWT.decode(token);
       return jwt.getClaim("userId").asLong();
-    } catch (JWTDecodeException e) {
-      log.error("error:{}", e.getMessage());
+    } catch (Exception e) {
+      return null;
+    }
+  }
+
+  public static AuthenticationType getAuthType(String token) {
+    try {
+      DecodedJWT jwt = JWT.decode(token);
+      int type = jwt.getClaim("type").asInt();
+      return AuthenticationType.of(type);
+    } catch (Exception e) {
       return null;
     }
   }
@@ -89,8 +99,8 @@ public class JWTUtil {
    * @param userName
    * @return
    */
-  public static String sign(Long userId, String userName) {
-    return sign(userId, userName, getExpireTime());
+  public static String sign(Long userId, String userName, AuthenticationType 
authType) {
+    return sign(userId, userName, authType, getExpireTime());
   }
 
   /**
@@ -101,18 +111,15 @@ public class JWTUtil {
    * @param expireTime
    * @return
    */
-  public static String sign(Long userId, String userName, Long expireTime) {
-    try {
-      Date date = new Date(expireTime);
-      return JWT.create()
-          .withClaim("userId", userId)
-          .withClaim("userName", userName)
-          .withExpiresAt(date)
-          .sign(algorithm);
-    } catch (Exception e) {
-      log.error("error:{}", e);
-      return null;
-    }
+  public static String sign(
+      Long userId, String userName, AuthenticationType authType, Long 
expireTime) {
+    Date date = new Date(expireTime);
+    return JWT.create()
+        .withClaim("userId", userId)
+        .withClaim("userName", userName)
+        .withClaim("type", authType.get())
+        .withExpiresAt(date)
+        .sign(algorithm);
   }
 
   /** get token expire timestamp */
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/authentication/ShiroRealm.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/authentication/ShiroRealm.java
index 98e22a313..2dfea0b0c 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/authentication/ShiroRealm.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/authentication/ShiroRealm.java
@@ -18,6 +18,7 @@
 package org.apache.streampark.console.system.authentication;
 
 import org.apache.streampark.console.base.util.WebUtils;
+import org.apache.streampark.console.core.enums.AuthenticationType;
 import org.apache.streampark.console.system.entity.AccessToken;
 import org.apache.streampark.console.system.entity.User;
 import org.apache.streampark.console.system.service.AccessTokenService;
@@ -79,8 +80,9 @@ public class ShiroRealm extends AuthorizingRealm {
   protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken 
authenticationToken)
       throws AuthenticationException {
     // The token here is passed from the executeLogin method of JWTFilter and 
has been decrypted
-    String token = (String) authenticationToken.getCredentials();
-    String username = JWTUtil.getUserName(token);
+    String credential = (String) authenticationToken.getCredentials();
+    String username = JWTUtil.getUserName(credential);
+
     if (StringUtils.isBlank(username)) {
       throw new AuthenticationException("Token verification failed");
     }
@@ -91,16 +93,25 @@ public class ShiroRealm extends AuthorizingRealm {
       throw new AuthenticationException("ERROR Incorrect username or 
password!");
     }
 
-    if (!JWTUtil.verify(token, username)) {
+    if (!JWTUtil.verify(credential, username)) {
+      throw new AuthenticationException("Authentication fained.");
+    }
+
+    AuthenticationType authType = JWTUtil.getAuthType(credential);
+    if (authType == AuthenticationType.OPENAPI) {
       // Check whether the token belongs to the api and whether the permission 
is valid
-      String tokenDb = WebUtils.encryptToken(token);
-      boolean effective = 
accessTokenService.checkTokenEffective(user.getUserId(), tokenDb);
-      if (!effective) {
+      AccessToken accessToken = 
accessTokenService.getByUserId(user.getUserId());
+      if (accessToken == null
+          || 
!accessToken.getToken().equals(WebUtils.encryptToken(credential))) {
+        throw new AuthenticationException("the openapi token is invalid");
+      }
+      if (AccessToken.STATUS_DISABLE.equals(accessToken.getFinalStatus())) {
         throw new AuthenticationException(
-            "Token checked failed: 1-[Browser Request] please check the 
username or password; 2-[Api Request] please check the user status or 
accessToken status");
+            "the openapi token has been disabled, please contact the 
administrator");
       }
       
SecurityUtils.getSubject().getSession().setAttribute(AccessToken.IS_API_TOKEN, 
true);
     }
-    return new SimpleAuthenticationInfo(token, token, 
"streampark_shiro_realm");
+
+    return new SimpleAuthenticationInfo(credential, credential, 
"streampark_shiro_realm");
   }
 }
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/AccessTokenController.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/AccessTokenController.java
index 4d905d418..81b9fe928 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/AccessTokenController.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/AccessTokenController.java
@@ -63,12 +63,6 @@ public class AccessTokenController {
         required = true,
         example = "100000",
         schema = @Schema(implementation = Long.class)),
-    @Parameter(
-        name = "expireTime",
-        description = "token expire time, yyyy-MM-dd HH:mm:ss",
-        required = true,
-        example = "9999-01-01 00:00:00",
-        schema = @Schema(implementation = String.class)),
     @Parameter(
         name = "description",
         description = "token description",
@@ -78,10 +72,9 @@ public class AccessTokenController {
   @RequiresPermissions("token:add")
   public RestResponse createToken(
       @NotBlank(message = "{required}") Long userId,
-      String expireTime,
       @RequestParam(required = false) String description)
       throws InternalException {
-    return accessTokenService.create(userId, expireTime, description);
+    return accessTokenService.create(userId, description);
   }
 
   @Operation(summary = "Verify current user token")
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/PassportController.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/PassportController.java
index bfb5f819c..680c4ee21 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/PassportController.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/PassportController.java
@@ -22,6 +22,7 @@ import org.apache.streampark.console.base.domain.ResponseCode;
 import org.apache.streampark.console.base.domain.RestResponse;
 import org.apache.streampark.console.base.properties.ShiroProperties;
 import org.apache.streampark.console.base.util.WebUtils;
+import org.apache.streampark.console.core.enums.AuthenticationType;
 import org.apache.streampark.console.system.authentication.JWTToken;
 import org.apache.streampark.console.system.authentication.JWTUtil;
 import org.apache.streampark.console.system.entity.User;
@@ -40,6 +41,8 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import javax.validation.constraints.NotBlank;
 
 import java.time.LocalDateTime;
@@ -51,6 +54,8 @@ import java.util.Map;
 @RequestMapping("passport")
 public class PassportController {
 
+  private static final String TOKEN = "Authorization";
+
   @Autowired private UserService userService;
 
   @Autowired private ShiroProperties properties;
@@ -60,6 +65,8 @@ public class PassportController {
   @Operation(summary = "Signin")
   @PostMapping("signin")
   public RestResponse signin(
+      HttpServletRequest request,
+      HttpServletResponse response,
       @NotBlank(message = "{required}") String username,
       @NotBlank(message = "{required}") String password,
       @NotBlank(message = "{required}") String loginType)
@@ -88,21 +95,30 @@ public class PassportController {
     }
 
     this.userService.updateLoginTime(username);
-    String token = WebUtils.encryptToken(JWTUtil.sign(user.getUserId(), 
username));
+    String sign = JWTUtil.sign(user.getUserId(), username, 
AuthenticationType.SIGN);
+
     LocalDateTime expireTime = 
LocalDateTime.now().plusSeconds(properties.getJwtTimeOut());
-    String expireTimeStr = DateUtils.formatFullTime(expireTime);
-    JWTToken jwtToken = new JWTToken(token, expireTimeStr);
+    String ttl = DateUtils.formatFullTime(expireTime);
+
+    // shiro login
+    JWTToken loginToken = new JWTToken(sign, ttl, 
AuthenticationType.SIGN.get());
+    SecurityUtils.getSubject().login(loginToken);
+
+    // generate UserInfo
+    String token = WebUtils.encryptToken(sign);
+    JWTToken jwtToken = new JWTToken(token, ttl, 
AuthenticationType.SIGN.get());
     String userId = RandomStringUtils.randomAlphanumeric(20);
     user.setId(userId);
     Map<String, Object> userInfo =
         userService.generateFrontendUserInfo(user, user.getLastTeamId(), 
jwtToken);
+
     return new RestResponse().data(userInfo);
   }
 
   @Operation(summary = "Signout")
   @PostMapping("signout")
   public RestResponse signout() {
-    SecurityUtils.getSecurityManager().logout(SecurityUtils.getSubject());
+    SecurityUtils.getSubject().logout();
     return new RestResponse();
   }
 }
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/entity/AccessToken.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/entity/AccessToken.java
index 428619a40..711394fec 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/entity/AccessToken.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/entity/AccessToken.java
@@ -53,9 +53,6 @@ public class AccessToken implements Serializable {
   @NotNull(message = "{required}")
   private Integer status;
 
-  @NotNull(message = "{required}")
-  private Date expireTime;
-
   private String description;
 
   private Date createTime;
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/AccessTokenService.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/AccessTokenService.java
index 12a78b6d2..f076c8f29 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/AccessTokenService.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/AccessTokenService.java
@@ -27,7 +27,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 
 public interface AccessTokenService extends IService<AccessToken> {
 
-  RestResponse create(Long userId, String expireTime, String description) 
throws InternalException;
+  RestResponse create(Long userId, String description) throws 
InternalException;
 
   boolean deleteToken(Long id);
 
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/AccessTokenServiceImpl.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/AccessTokenServiceImpl.java
index 904576ef9..bcc5bd904 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/AccessTokenServiceImpl.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/AccessTokenServiceImpl.java
@@ -17,12 +17,12 @@
 
 package org.apache.streampark.console.system.service.impl;
 
-import org.apache.streampark.common.util.DateUtils;
 import org.apache.streampark.console.base.domain.ResponseCode;
 import org.apache.streampark.console.base.domain.RestRequest;
 import org.apache.streampark.console.base.domain.RestResponse;
 import org.apache.streampark.console.base.mybatis.pager.MybatisPager;
 import org.apache.streampark.console.base.util.WebUtils;
+import org.apache.streampark.console.core.enums.AuthenticationType;
 import org.apache.streampark.console.system.authentication.JWTToken;
 import org.apache.streampark.console.system.authentication.JWTUtil;
 import org.apache.streampark.console.system.entity.AccessToken;
@@ -31,8 +31,6 @@ import 
org.apache.streampark.console.system.mapper.AccessTokenMapper;
 import org.apache.streampark.console.system.service.AccessTokenService;
 import org.apache.streampark.console.system.service.UserService;
 
-import org.apache.commons.lang3.StringUtils;
-
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -45,7 +43,6 @@ import 
org.springframework.transaction.annotation.Transactional;
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;
-import java.util.TimeZone;
 
 @Slf4j
 @Service
@@ -56,24 +53,20 @@ public class AccessTokenServiceImpl extends 
ServiceImpl<AccessTokenMapper, Acces
   @Autowired private UserService userService;
 
   @Override
-  public RestResponse create(Long userId, String expireTime, String 
description) {
+  public RestResponse create(Long userId, String description) {
     User user = userService.getById(userId);
     if (Objects.isNull(user)) {
       return RestResponse.success().put("code", 0).message("user not 
available");
     }
-
-    if (StringUtils.isEmpty(expireTime)) {
-      expireTime = AccessToken.DEFAULT_EXPIRE_TIME;
-    }
-    Long ttl = DateUtils.getTime(expireTime, DateUtils.fullFormat(), 
TimeZone.getDefault());
-    String token = WebUtils.encryptToken(JWTUtil.sign(user.getUserId(), 
user.getUsername(), ttl));
-    JWTToken jwtToken = new JWTToken(token, expireTime);
+    String token =
+        WebUtils.encryptToken(
+            JWTUtil.sign(user.getUserId(), user.getUsername(), 
AuthenticationType.OPENAPI));
+    JWTToken jwtToken = new JWTToken(token, AccessToken.DEFAULT_EXPIRE_TIME, 
1);
 
     AccessToken accessToken = new AccessToken();
     accessToken.setToken(jwtToken.getToken());
     accessToken.setUserId(user.getUserId());
     accessToken.setDescription(description);
-    accessToken.setExpireTime(DateUtils.stringToDate(jwtToken.getExpireAt()));
 
     Date date = new Date();
     accessToken.setCreateTime(date);
diff --git 
a/streampark-console/streampark-console-service/src/main/resources/mapper/system/AccessTokenMapper.xml
 
b/streampark-console/streampark-console-service/src/main/resources/mapper/system/AccessTokenMapper.xml
index e36715720..5a440a13e 100644
--- 
a/streampark-console/streampark-console-service/src/main/resources/mapper/system/AccessTokenMapper.xml
+++ 
b/streampark-console/streampark-console-service/src/main/resources/mapper/system/AccessTokenMapper.xml
@@ -23,7 +23,6 @@
         t1.user_id,
         t2.username,
         t1.token,
-        t1.expire_time,
         t1.create_time,
         t1.modify_time,
         t1.description,
diff --git 
a/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/AccessTokenServiceTest.java
 
b/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/AccessTokenServiceTest.java
index b885053dd..14b278d3e 100644
--- 
a/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/AccessTokenServiceTest.java
+++ 
b/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/AccessTokenServiceTest.java
@@ -42,8 +42,7 @@ public class AccessTokenServiceTest extends SpringTestBase {
   @Test
   void testCrudToken() throws Exception {
     Long mockUserId = 100000L;
-    String expireTime = "9999-01-01 00:00:00";
-    RestResponse restResponse = accessTokenService.create(mockUserId, 
expireTime, "");
+    RestResponse restResponse = accessTokenService.create(mockUserId, "");
     Assertions.assertNotNull(restResponse);
     Assertions.assertInstanceOf(AccessToken.class, restResponse.get("data"));
 
diff --git 
a/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/system/authentication/JWTTest.java
 
b/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/system/authentication/JWTTest.java
index 4acc63e8b..4d9dcfaa4 100644
--- 
a/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/system/authentication/JWTTest.java
+++ 
b/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/system/authentication/JWTTest.java
@@ -19,6 +19,7 @@ package org.apache.streampark.console.system.authentication;
 
 import org.apache.streampark.common.util.DateUtils;
 import org.apache.streampark.console.SpringTestBase;
+import org.apache.streampark.console.core.enums.AuthenticationType;
 import org.apache.streampark.console.system.entity.AccessToken;
 
 import com.auth0.jwt.JWT;
@@ -38,6 +39,7 @@ class JWTTest extends SpringTestBase {
         JWTUtil.sign(
             10000L,
             userName,
+            AuthenticationType.SIGN,
             DateUtils.getTime(expireTime, DateUtils.fullFormat(), 
TimeZone.getDefault()));
 
     assert token != null;
diff --git 
a/streampark-console/streampark-console-webapp/src/api/system/model/tokenModel.ts
 
b/streampark-console/streampark-console-webapp/src/api/system/model/tokenModel.ts
index 6997d8e30..7805e6592 100644
--- 
a/streampark-console/streampark-console-webapp/src/api/system/model/tokenModel.ts
+++ 
b/streampark-console/streampark-console-webapp/src/api/system/model/tokenModel.ts
@@ -20,7 +20,6 @@ export interface TokenListRecord {
   userId: string;
   token: string;
   status: number;
-  expireTime: string;
   description: string;
   createTime: string;
   modifyTime: string;
@@ -32,6 +31,5 @@ export interface TokenListRecord {
 export interface TokenCreateParam {
   userId: number;
   description: string;
-  expireTime: string;
   teamId: string;
 }
diff --git 
a/streampark-console/streampark-console-webapp/src/locales/lang/en/system/token.ts
 
b/streampark-console/streampark-console-webapp/src/locales/lang/en/system/token.ts
index 175de6a58..9cff6b27f 100644
--- 
a/streampark-console/streampark-console-webapp/src/locales/lang/en/system/token.ts
+++ 
b/streampark-console/streampark-console-webapp/src/locales/lang/en/system/token.ts
@@ -24,7 +24,6 @@ export default {
     title: 'Token List',
     userName: 'User Name',
     token: 'Token',
-    expireTime: 'Expire Time',
     status: 'Status',
   },
   operation: {
diff --git 
a/streampark-console/streampark-console-webapp/src/locales/lang/zh-CN/system/token.ts
 
b/streampark-console/streampark-console-webapp/src/locales/lang/zh-CN/system/token.ts
index 8ae1e3c91..2a5db3021 100644
--- 
a/streampark-console/streampark-console-webapp/src/locales/lang/zh-CN/system/token.ts
+++ 
b/streampark-console/streampark-console-webapp/src/locales/lang/zh-CN/system/token.ts
@@ -24,7 +24,6 @@ export default {
     title: '令牌列表',
     userName: '用户名',
     token: '令牌',
-    expireTime: '过期时间',
     status: '状态',
   },
   operation: {
diff --git 
a/streampark-console/streampark-console-webapp/src/views/system/token/token.data.ts
 
b/streampark-console/streampark-console-webapp/src/views/system/token/token.data.ts
index a75719dce..192a71112 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/system/token/token.data.ts
+++ 
b/streampark-console/streampark-console-webapp/src/views/system/token/token.data.ts
@@ -51,11 +51,6 @@ export const columns: BasicColumn[] = [
     title: t('common.createTime'),
     dataIndex: 'createTime',
   },
-  {
-    title: t('system.token.table.expireTime'),
-    dataIndex: 'expireTime',
-    sorter: true,
-  },
   {
     title: t('system.token.table.status'),
     dataIndex: 'userStatus',
@@ -117,13 +112,4 @@ export const formSchema: FormSchema[] = [
     label: t('common.description'),
     component: 'InputTextArea',
   },
-  {
-    field: 'expireTime',
-    label: t('system.token.table.expireTime'),
-    component: 'DatePicker',
-    defaultValue: dayjs('9999-01-01'),
-    componentProps: {
-      disabled: true,
-    },
-  },
 ];


Reply via email to