This is an automated email from the ASF dual-hosted git repository.
benjobs pushed a commit to branch dev-2.1.5
in repository https://gitbox.apache.org/repos/asf/incubator-streampark.git
The following commit(s) were added to refs/heads/dev-2.1.5 by this push:
new 1c718e08e [Improve] openapi access bug fixed. (#3938)
1c718e08e is described below
commit 1c718e08ee4ed19ff2e03b36230b27ef1bc9f79e
Author: benjobs <[email protected]>
AuthorDate: Sat Aug 3 08:56:19 2024 +0800
[Improve] openapi access bug fixed. (#3938)
* [Improve] openapi access bug fixed.
* [Improve] openapi minor improve
---
.../streampark/console/base/util/WebUtils.java | 38 -----------
.../console/core/controller/OpenAPIController.java | 2 +-
.../console/core/controller/ProxyController.java | 8 +--
.../console/core/service/ProxyService.java | 8 +--
.../core/service/impl/ProxyServiceImpl.java | 14 ++--
.../console/system/authentication/JWTFilter.java | 23 ++-----
.../console/system/authentication/JWTToken.java | 5 +-
.../console/system/authentication/JWTUtil.java | 78 +++++++++++++++-------
.../console/system/authentication/ShiroRealm.java | 68 +++++++++++--------
.../system/controller/AccessTokenController.java | 7 +-
.../system/controller/PassportController.java | 13 +---
.../console/system/controller/UserController.java | 3 +-
.../console/system/entity/AccessToken.java | 1 -
.../console/system/runner/StartedUpRunner.java | 1 +
.../console/system/service/AccessTokenService.java | 7 +-
.../console/system/service/UserService.java | 2 +-
.../service/impl/AccessTokenServiceImpl.java | 16 ++---
.../system/service/impl/UserServiceImpl.java | 4 +-
.../core/service/AccessTokenServiceTest.java | 8 +--
.../console/system/authentication/JWTTest.java | 23 ++++---
20 files changed, 153 insertions(+), 176 deletions(-)
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/util/WebUtils.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/util/WebUtils.java
index 92fd00291..be1771662 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/util/WebUtils.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/util/WebUtils.java
@@ -33,36 +33,6 @@ public final class WebUtils {
private WebUtils() {}
- /**
- * token encrypt
- *
- * @param token token
- * @return encrypt token
- */
- public static String encryptToken(String token) {
- try {
- return EncryptUtils.encrypt(token);
- } catch (Exception e) {
- log.info("token encrypt failed: ", e);
- return null;
- }
- }
-
- /**
- * token decrypt
- *
- * @param encryptToken encryptToken
- * @return decrypt token
- */
- public static String decryptToken(String encryptToken) {
- try {
- return EncryptUtils.decrypt(encryptToken);
- } catch (Exception e) {
- log.info("token decrypt failed: ", e);
- return null;
- }
- }
-
/**
* camel to underscore
*
@@ -106,15 +76,7 @@ public final class WebUtils {
return getAppDir("lib");
}
- public static File getAppPluginsDir() {
- return getAppDir("plugins");
- }
-
public static File getAppClientDir() {
return getAppDir("client");
}
-
- public static File getAppConfDir() {
- return getAppDir("conf");
- }
}
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/OpenAPIController.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/OpenAPIController.java
index 6cf591dcd..6369782aa 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/OpenAPIController.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/OpenAPIController.java
@@ -89,7 +89,7 @@ public class OpenAPIController {
@RequiresPermissions("app:start")
public RestResponse flinkStart(Application app) throws Exception {
applicationService.start(app, false);
- return RestResponse.success(true);
+ return RestResponse.success();
}
@OpenAPI(
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ProxyController.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ProxyController.java
index d909ecd6a..49c6a9f32 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ProxyController.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ProxyController.java
@@ -30,8 +30,6 @@ import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
-import java.io.IOException;
-
@Slf4j
@Validated
@RestController
@@ -42,19 +40,19 @@ public class ProxyController {
@GetMapping("flink-ui/{id}/**")
public ResponseEntity<?> proxyFlinkUI(HttpServletRequest request,
@PathVariable("id") Long id)
- throws IOException {
+ throws Exception {
return proxyService.proxyFlinkUI(request, id);
}
@GetMapping("job_manager/{id}/**")
public ResponseEntity<?> proxyJobManager(
- HttpServletRequest request, @PathVariable("id") Long logId) throws
IOException {
+ HttpServletRequest request, @PathVariable("id") Long logId) throws
Exception {
return proxyService.proxyJobManager(request, logId);
}
@GetMapping("yarn/{appId}/**")
public ResponseEntity<?> proxyURL(HttpServletRequest request,
@PathVariable("appId") String appId)
- throws IOException {
+ throws Exception {
return proxyService.proxyYarn(request, appId);
}
}
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/ProxyService.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/ProxyService.java
index 57d66ede6..a008c2b3e 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/ProxyService.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/ProxyService.java
@@ -21,12 +21,10 @@ import org.springframework.http.ResponseEntity;
import javax.servlet.http.HttpServletRequest;
-import java.io.IOException;
-
public interface ProxyService {
- ResponseEntity<?> proxyFlinkUI(HttpServletRequest request, Long id) throws
IOException;
+ ResponseEntity<?> proxyFlinkUI(HttpServletRequest request, Long id) throws
Exception;
- ResponseEntity<?> proxyYarn(HttpServletRequest request, String url) throws
IOException;
+ ResponseEntity<?> proxyYarn(HttpServletRequest request, String url) throws
Exception;
- ResponseEntity<?> proxyJobManager(HttpServletRequest request, Long logId)
throws IOException;
+ ResponseEntity<?> proxyJobManager(HttpServletRequest request, Long logId)
throws Exception;
}
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ProxyServiceImpl.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ProxyServiceImpl.java
index d89ff055e..93a929673 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ProxyServiceImpl.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ProxyServiceImpl.java
@@ -18,7 +18,7 @@
package org.apache.streampark.console.core.service.impl;
import org.apache.streampark.common.util.YarnUtils;
-import org.apache.streampark.console.base.util.WebUtils;
+import org.apache.streampark.console.base.util.EncryptUtils;
import org.apache.streampark.console.core.entity.Application;
import org.apache.streampark.console.core.entity.ApplicationLog;
import org.apache.streampark.console.core.entity.FlinkCluster;
@@ -51,7 +51,6 @@ import javax.annotation.Nonnull;
import javax.servlet.http.HttpServletRequest;
import java.io.ByteArrayOutputStream;
-import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
@@ -88,7 +87,7 @@ public class ProxyServiceImpl implements ProxyService {
}
@Override
- public ResponseEntity<?> proxyFlinkUI(HttpServletRequest request, Long
appId) throws IOException {
+ public ResponseEntity<?> proxyFlinkUI(HttpServletRequest request, Long
appId) throws Exception {
ResponseEntity.BodyBuilder builder =
ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE);
if (appId == null) {
return builder.body("Invalid operation, appId is null");
@@ -140,7 +139,7 @@ public class ProxyServiceImpl implements ProxyService {
}
@Override
- public ResponseEntity<?> proxyYarn(HttpServletRequest request, String appId)
throws IOException {
+ public ResponseEntity<?> proxyYarn(HttpServletRequest request, String appId)
throws Exception {
String yarnURL = YarnUtils.getRMWebAppProxyURL();
String url = yarnURL + "/proxy/" + appId + "/";
url += getRequestURL(request).replace("/proxy/yarn/" + appId, "");
@@ -149,15 +148,14 @@ public class ProxyServiceImpl implements ProxyService {
@Override
public ResponseEntity<?> proxyJobManager(HttpServletRequest request, Long
logId)
- throws IOException {
+ throws Exception {
ApplicationLog log = logService.getById(logId);
String url = log.getJobManagerUrl();
url += getRequestURL(request).replace("/proxy/job_manager/" + logId, "");
return proxyRequest(request, url);
}
- private ResponseEntity<?> proxyRequest(HttpServletRequest request, String
url)
- throws IOException {
+ private ResponseEntity<?> proxyRequest(HttpServletRequest request, String
url) throws Exception {
HttpHeaders headers = new HttpHeaders();
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
@@ -167,7 +165,7 @@ public class ProxyServiceImpl implements ProxyService {
String token = serviceHelper.getAuthorization();
if (token != null) {
- headers.set("Authorization", WebUtils.encryptToken(token));
+ headers.set("Authorization", EncryptUtils.encrypt(token));
}
byte[] body = 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 54f9ecac8..415f5b8a7 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
@@ -17,8 +17,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.base.util.EncryptUtils;
import org.apache.shiro.authz.UnauthorizedException;
import org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter;
@@ -58,22 +57,14 @@ public class JWTFilter extends
BasicHttpAuthenticationFilter {
protected boolean executeLogin(ServletRequest request, ServletResponse
response) {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
String token = httpServletRequest.getHeader(TOKEN);
- AuthenticationType type =
JWTUtil.getAuthType(WebUtils.decryptToken(token));
-
- if (type == null) {
+ try {
+ token = EncryptUtils.decrypt(token);
+ JWTToken jwtToken = new JWTToken(token);
+ getSubject(request, response).login(jwtToken);
+ return true;
+ } catch (Exception e) {
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 2be2039bb..4e00e70ce 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,16 +33,13 @@ public class JWTToken implements AuthenticationToken {
private String expireAt;
- private int signType;
-
public JWTToken(String token) {
this.token = token;
}
- public JWTToken(String token, String expireAt, int signType) {
+ public JWTToken(String token, String expireAt) {
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 7c6b1302f..9f6d00fb6 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
@@ -17,9 +17,12 @@
package org.apache.streampark.console.system.authentication;
+import org.apache.streampark.console.base.util.EncryptUtils;
import org.apache.streampark.console.core.enums.AuthenticationType;
+import org.apache.streampark.console.system.entity.User;
import com.auth0.jwt.JWT;
+import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;
@@ -33,6 +36,11 @@ public class JWTUtil {
private static Long ttlOfSecond;
+ private static final String JWT_USERID = "userId";
+ private static final String JWT_USERNAME = "userName";
+ private static final String JWT_TYPE = "type";
+ private static final String JWT_TIMESTAMP = "timestamp";
+
/**
* verify token
*
@@ -42,7 +50,7 @@ public class JWTUtil {
public static boolean verify(String token, String username, String secret) {
try {
Algorithm algorithm = Algorithm.HMAC256(secret);
- JWTVerifier verifier = JWT.require(algorithm).withClaim("userName",
username).build();
+ JWTVerifier verifier = JWT.require(algorithm).withClaim(JWT_USERNAME,
username).build();
verifier.verify(token);
return true;
} catch (Exception ignored) {
@@ -54,7 +62,7 @@ public class JWTUtil {
public static String getUserName(String token) {
try {
DecodedJWT jwt = JWT.decode(token);
- return jwt.getClaim("userName").asString();
+ return jwt.getClaim(JWT_USERNAME).asString();
} catch (Exception ignored) {
return null;
}
@@ -63,16 +71,33 @@ public class JWTUtil {
public static Long getUserId(String token) {
try {
DecodedJWT jwt = JWT.decode(token);
- return jwt.getClaim("userId").asLong();
+ return jwt.getClaim(JWT_USERID).asLong();
} catch (Exception ignored) {
return null;
}
}
+ /**
+ * @param token
+ * @return
+ */
+ public static Long getTimestamp(String token) {
+ try {
+ DecodedJWT jwt = JWT.decode(token);
+ return jwt.getClaim(JWT_TIMESTAMP).asLong();
+ } catch (Exception ignored) {
+ return 0L;
+ }
+ }
+
+ /**
+ * @param token
+ * @return
+ */
public static AuthenticationType getAuthType(String token) {
try {
DecodedJWT jwt = JWT.decode(token);
- int type = jwt.getClaim("type").asInt();
+ int type = jwt.getClaim(JWT_TYPE).asInt();
return AuthenticationType.of(type);
} catch (Exception ignored) {
return null;
@@ -80,37 +105,42 @@ public class JWTUtil {
}
/**
- * generate token
- *
- * @param userId
- * @param userName
+ * @param user
+ * @param authType
* @return
+ * @throws Exception
*/
- public static String sign(
- Long userId, String userName, String secret, AuthenticationType
authType) {
+ public static String sign(User user, AuthenticationType authType) throws
Exception {
long second = getTTLOfSecond() * 1000;
Long ttl = System.currentTimeMillis() + second;
- return sign(userId, userName, secret, authType, ttl);
+ return sign(user, authType, ttl);
}
/**
- * generate token
- *
- * @param userId
- * @param userName
+ * @param user
+ * @param authType
* @param expireTime
* @return
+ * @throws Exception
*/
- public static String sign(
- Long userId, String userName, String secret, AuthenticationType
authType, Long expireTime) {
+ public static String sign(User user, AuthenticationType authType, Long
expireTime)
+ throws Exception {
Date date = new Date(expireTime);
- Algorithm algorithm = Algorithm.HMAC256(secret);
- return JWT.create()
- .withClaim("userId", userId)
- .withClaim("userName", userName)
- .withClaim("type", authType.get())
- .withExpiresAt(date)
- .sign(algorithm);
+ Algorithm algorithm = Algorithm.HMAC256(user.getSalt());
+
+ JWTCreator.Builder builder =
+ JWT.create()
+ .withClaim(JWT_USERID, user.getUserId())
+ .withClaim(JWT_USERNAME, user.getUsername())
+ .withClaim(JWT_TYPE, authType.get())
+ .withExpiresAt(date);
+
+ if (authType == AuthenticationType.SIGN) {
+ builder.withClaim(JWT_TIMESTAMP, System.currentTimeMillis());
+ }
+
+ String token = builder.sign(algorithm);
+ return EncryptUtils.encrypt(token);
}
public static Long getTTLOfSecond() {
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 37583ada1..d3c71ca9a 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
@@ -17,14 +17,14 @@
package org.apache.streampark.console.system.authentication;
-import org.apache.streampark.console.base.util.WebUtils;
+import org.apache.streampark.common.util.SystemPropertyUtils;
+import org.apache.streampark.console.base.util.EncryptUtils;
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;
import org.apache.streampark.console.system.service.UserService;
-import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
@@ -82,40 +82,54 @@ public class ShiroRealm extends AuthorizingRealm {
// The token here is passed from the executeLogin method of JWTFilter and
has been decrypted
String credential = (String) authenticationToken.getCredentials();
String username = JWTUtil.getUserName(credential);
+ Long userId = JWTUtil.getUserId(credential);
+ AuthenticationType authType = JWTUtil.getAuthType(credential);
- if (StringUtils.isBlank(username)) {
+ if (username == null || userId == null || authType == null) {
throw new AuthenticationException("the authorization token is invalid");
}
+
+ switch (authType) {
+ case SIGN:
+ Long timestamp = JWTUtil.getTimestamp(credential);
+ Long startTime =
SystemPropertyUtils.getLong("streampark.start.timestamp", 0);
+ if (timestamp < startTime) {
+ throw new AuthenticationException("the authorization token is
expired");
+ }
+ break;
+ case OPENAPI:
+ // Check whether the token belongs to the api and whether the
permission is valid
+ AccessToken accessToken = accessTokenService.getByUserId(userId);
+ try {
+ String encryptToken = EncryptUtils.encrypt(credential);
+ if (accessToken == null ||
!accessToken.getToken().equals(encryptToken)) {
+ throw new AuthenticationException("the openapi authorization token
is invalid");
+ }
+ } catch (Exception e) {
+ throw new AuthenticationException(e);
+ }
+
+ if (AccessToken.STATUS_DISABLE.equals(accessToken.getStatus())) {
+ throw new AuthenticationException(
+ "the openapi authorization token is disabled, please contact the
administrator");
+ }
+
+ if (User.STATUS_LOCK.equals(accessToken.getUserStatus())) {
+ throw new AuthenticationException(
+ "the user [" + username + "] has been locked, please contact the
administrator");
+ }
+
SecurityUtils.getSubject().getSession().setAttribute(AccessToken.IS_API_TOKEN,
true);
+ break;
+ default:
+ break;
+ }
+
// Query user information by username
User user = userService.findByName(username);
-
if (user == null || !JWTUtil.verify(credential, username, user.getSalt()))
{
throw new AuthenticationException("the authorization token verification
failed.");
}
- AuthenticationType authType = JWTUtil.getAuthType(credential);
- if (authType == AuthenticationType.OPENAPI) {
- // Check whether the token belongs to the api and whether the permission
is valid
- AccessToken accessToken =
accessTokenService.getByUserId(user.getUserId());
- if (accessToken == null
- ||
!accessToken.getToken().equals(WebUtils.encryptToken(credential))) {
- throw new AuthenticationException("the openapi authorization token is
invalid");
- }
-
- if (AccessToken.STATUS_DISABLE.equals(accessToken.getStatus())) {
- throw new AuthenticationException(
- "the openapi authorization token is disabled, please contact the
administrator");
- }
-
- if (User.STATUS_LOCK.equals(accessToken.getUserStatus())) {
- throw new AuthenticationException(
- "the user ["
- + user.getUsername()
- + "] has been locked, please contact the administrator");
- }
-
SecurityUtils.getSubject().getSession().setAttribute(AccessToken.IS_API_TOKEN,
true);
- }
-
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 331289e24..1d5226d1c 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
@@ -20,7 +20,6 @@ package org.apache.streampark.console.system.controller;
import org.apache.streampark.common.util.CURLBuilder;
import org.apache.streampark.console.base.domain.RestRequest;
import org.apache.streampark.console.base.domain.RestResponse;
-import org.apache.streampark.console.base.exception.InternalException;
import org.apache.streampark.console.core.annotation.PermissionScope;
import org.apache.streampark.console.core.enums.AccessTokenState;
import org.apache.streampark.console.core.service.ServiceHelper;
@@ -55,7 +54,7 @@ public class AccessTokenController {
public RestResponse createToken(
@NotBlank(message = "{required}") Long userId,
@RequestParam(required = false) String description)
- throws InternalException {
+ throws Exception {
return accessTokenService.create(userId, description);
}
@@ -86,14 +85,14 @@ public class AccessTokenController {
@PostMapping("toggle")
@RequiresPermissions("token:add")
public RestResponse toggleToken(@NotNull(message = "{required}") Long
tokenId) {
- return accessTokenService.toggleToken(tokenId);
+ return accessTokenService.toggle(tokenId);
}
/** delete token by id */
@DeleteMapping(value = "delete")
@RequiresPermissions("token:delete")
public RestResponse deleteToken(@NotBlank(message = "{required}") Long
tokenId) {
- boolean res = accessTokenService.deleteToken(tokenId);
+ boolean res = accessTokenService.delete(tokenId);
return RestResponse.success(res);
}
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 d7d98f281..3694b2564 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
@@ -19,7 +19,6 @@ package org.apache.streampark.console.system.controller;
import org.apache.streampark.common.util.DateUtils;
import org.apache.streampark.console.base.domain.RestResponse;
-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;
@@ -73,22 +72,16 @@ public class PassportController {
}
this.userService.updateLoginTime(username);
- String sign = JWTUtil.sign(user.getUserId(), username, user.getSalt(),
AuthenticationType.SIGN);
+ String token = JWTUtil.sign(user, AuthenticationType.SIGN);
LocalDateTime expireTime =
LocalDateTime.now().plusSeconds(JWTUtil.getTTLOfSecond());
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);
+ JWTToken jwtToken = new JWTToken(token, ttl);
+ Map<String, Object> userInfo = userService.generateFrontendUserInfo(user,
jwtToken);
return new RestResponse().data(userInfo);
}
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/UserController.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/UserController.java
index 126bd5a66..0ee5c771c 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/UserController.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/UserController.java
@@ -131,8 +131,9 @@ public class UserController {
// 2) get latest userInfo
user.dataMasking();
+ user.setLastTeamId(teamId);
- Map<String, Object> infoMap = userService.generateFrontendUserInfo(user,
teamId, null);
+ Map<String, Object> infoMap = userService.generateFrontendUserInfo(user,
null);
return new RestResponse().data(infoMap);
}
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 2db73775e..bb571577f 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
@@ -35,7 +35,6 @@ import java.util.Date;
public class AccessToken implements Serializable {
private static final long serialVersionUID = 1L;
- public static final String DEFAULT_EXPIRE_TIME = "9999-01-01 00:00:00";
public static final String IS_API_TOKEN = "is_api_token";
public static final Integer STATUS_ENABLE = 1;
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/runner/StartedUpRunner.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/runner/StartedUpRunner.java
index 93c0c5490..eba48034a 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/runner/StartedUpRunner.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/runner/StartedUpRunner.java
@@ -53,6 +53,7 @@ public class StartedUpRunner implements ApplicationRunner {
System.out.println(" Info : streampark-console start successful
");
System.out.println(" Local : http://localhost:" + port);
System.out.println(" Time : " + LocalDateTime.now() + "\n\n");
+ System.setProperty("streampark.start.timestamp",
System.currentTimeMillis() + "");
}
}
}
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 6bd7ed988..2fbecd52a 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
@@ -19,7 +19,6 @@ package org.apache.streampark.console.system.service;
import org.apache.streampark.console.base.domain.RestRequest;
import org.apache.streampark.console.base.domain.RestResponse;
-import org.apache.streampark.console.base.exception.InternalException;
import org.apache.streampark.console.system.entity.AccessToken;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -27,13 +26,13 @@ import com.baomidou.mybatisplus.extension.service.IService;
public interface AccessTokenService extends IService<AccessToken> {
- RestResponse create(Long userId, String description) throws
InternalException;
+ RestResponse create(Long userId, String description) throws Exception;
- boolean deleteToken(Long id);
+ boolean delete(Long id);
IPage<AccessToken> page(AccessToken tokenParam, RestRequest request);
- RestResponse toggleToken(Long tokenId);
+ RestResponse toggle(Long tokenId);
AccessToken getByUserId(Long userId);
}
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/UserService.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/UserService.java
index 792830eb4..0dbb7042b 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/UserService.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/UserService.java
@@ -113,5 +113,5 @@ public interface UserService extends IService<User> {
List<User> findByAppOwner(Long teamId);
- Map<String, Object> generateFrontendUserInfo(User user, Long teamId,
JWTToken token);
+ Map<String, Object> generateFrontendUserInfo(User user, JWTToken token);
}
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 a682881ef..46f77b66a 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
@@ -21,9 +21,7 @@ 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;
import org.apache.streampark.console.system.entity.User;
@@ -52,19 +50,15 @@ public class AccessTokenServiceImpl extends
ServiceImpl<AccessTokenMapper, Acces
@Autowired private UserService userService;
@Override
- public RestResponse create(Long userId, String description) {
+ public RestResponse create(Long userId, String description) throws Exception
{
User user = userService.getById(userId);
if (user == null) {
return RestResponse.success().put("code", 0).message("user not
available");
}
- String token =
- WebUtils.encryptToken(
- JWTUtil.sign(
- user.getUserId(), user.getUsername(), user.getSalt(),
AuthenticationType.OPENAPI));
- JWTToken jwtToken = new JWTToken(token, AccessToken.DEFAULT_EXPIRE_TIME,
1);
+ String token = JWTUtil.sign(user, AuthenticationType.OPENAPI,
Long.MAX_VALUE);
AccessToken accessToken = new AccessToken();
- accessToken.setToken(jwtToken.getToken());
+ accessToken.setToken(token);
accessToken.setUserId(user.getUserId());
accessToken.setDescription(description);
@@ -78,7 +72,7 @@ public class AccessTokenServiceImpl extends
ServiceImpl<AccessTokenMapper, Acces
}
@Override
- public boolean deleteToken(Long id) {
+ public boolean delete(Long id) {
return this.removeById(id);
}
@@ -92,7 +86,7 @@ public class AccessTokenServiceImpl extends
ServiceImpl<AccessTokenMapper, Acces
}
@Override
- public RestResponse toggleToken(Long tokenId) {
+ public RestResponse toggle(Long tokenId) {
AccessToken tokenInfo = baseMapper.getById(tokenId);
if (tokenInfo == null) {
return RestResponse.fail("accessToken could not be found!",
ResponseCode.CODE_FAIL_ALERT);
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/UserServiceImpl.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/UserServiceImpl.java
index 410d8d370..0527d583a 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/UserServiceImpl.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/UserServiceImpl.java
@@ -216,7 +216,7 @@ public class UserServiceImpl extends
ServiceImpl<UserMapper, User> implements Us
* @return UserInfo
*/
@Override
- public Map<String, Object> generateFrontendUserInfo(User user, Long teamId,
JWTToken token) {
+ public Map<String, Object> generateFrontendUserInfo(User user, JWTToken
token) {
Map<String, Object> userInfo = new HashMap<>(8);
// 1) token & expire
@@ -230,7 +230,7 @@ public class UserServiceImpl extends
ServiceImpl<UserMapper, User> implements Us
userInfo.put("user", user);
// 3) permissions
- Set<String> permissions = this.getPermissions(user.getUserId(), teamId);
+ Set<String> permissions = this.getPermissions(user.getUserId(),
user.getLastTeamId());
userInfo.put("permissions", permissions);
return userInfo;
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 cc23b26ef..f9cb3411e 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
@@ -20,7 +20,7 @@ package org.apache.streampark.console.core.service;
import org.apache.streampark.console.SpringTestBase;
import org.apache.streampark.console.base.domain.RestRequest;
import org.apache.streampark.console.base.domain.RestResponse;
-import org.apache.streampark.console.base.util.WebUtils;
+import org.apache.streampark.console.base.util.EncryptUtils;
import org.apache.streampark.console.system.authentication.JWTToken;
import org.apache.streampark.console.system.authentication.JWTUtil;
import org.apache.streampark.console.system.entity.AccessToken;
@@ -49,7 +49,7 @@ public class AccessTokenServiceTest extends SpringTestBase {
// verify
AccessToken accessToken = (AccessToken) restResponse.get("data");
LOG.info(accessToken.getToken());
- JWTToken jwtToken = new
JWTToken(WebUtils.decryptToken(accessToken.getToken()));
+ JWTToken jwtToken = new
JWTToken(EncryptUtils.decrypt(accessToken.getToken()));
LOG.info(jwtToken.getToken());
String username = JWTUtil.getUserName(jwtToken.getToken());
Assertions.assertNotNull(username);
@@ -70,7 +70,7 @@ public class AccessTokenServiceTest extends SpringTestBase {
// toggle
Long tokenId = accessToken.getId();
- RestResponse toggleTokenResp = accessTokenService.toggleToken(tokenId);
+ RestResponse toggleTokenResp = accessTokenService.toggle(tokenId);
Assertions.assertNotNull(toggleTokenResp);
Assertions.assertTrue((Boolean) toggleTokenResp.get("data"));
@@ -80,6 +80,6 @@ public class AccessTokenServiceTest extends SpringTestBase {
Assertions.assertEquals(AccessToken.STATUS_DISABLE,
afterToggle.getStatus());
// delete
- Assertions.assertTrue(accessTokenService.deleteToken(tokenId));
+ Assertions.assertTrue(accessTokenService.delete(tokenId));
}
}
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 a1df28c47..984f874e6 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,8 +19,9 @@ 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.base.util.EncryptUtils;
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 com.auth0.jwt.JWT;
import org.junit.jupiter.api.Assertions;
@@ -32,21 +33,23 @@ import java.util.TimeZone;
class JWTTest extends SpringTestBase {
@Test
- void testExpireTime() {
+ void testExpireTime() throws Exception {
String userName = "black";
- String expireTime = AccessToken.DEFAULT_EXPIRE_TIME;
+ String ttl = "2022-09-01 00:00:00";
+
+ User user = new User();
+ user.setUserId(10000L);
+ user.setUsername(userName);
+ user.setSalt("streampark");
String token =
JWTUtil.sign(
- 10000L,
- userName,
- "streampark",
+ user,
AuthenticationType.SIGN,
- DateUtils.getTime(expireTime, DateUtils.fullFormat(),
TimeZone.getDefault()));
-
+ DateUtils.getTime(ttl, DateUtils.fullFormat(),
TimeZone.getDefault()));
assert token != null;
- Date expiresAt = JWT.decode(token).getExpiresAt();
+ Date expiresAt = JWT.decode(EncryptUtils.decrypt(token)).getExpiresAt();
String decodeExpireTime =
DateUtils.format(expiresAt, DateUtils.fullFormat(),
TimeZone.getDefault());
- Assertions.assertEquals(expireTime, decodeExpireTime);
+ Assertions.assertEquals(ttl, decodeExpireTime);
}
}