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,
- },
- },
];