in seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/interceptor/AuthenticationInterceptor.java [57:120]
public boolean preHandle(
HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
if (request.getMethod().equals(OPTIONS)) {
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Headers", "*");
response.setHeader("Access-Control-Allow-Methods", "*");
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Max-Age", "3600");
return true;
}
long currentTimestamp = System.currentTimeMillis();
final String token = request.getHeader(TOKEN);
if (StringUtils.isBlank(token)) {
log.info("user does not exist");
response.setStatus(HttpStatus.UNAUTHORIZED_401);
return false;
}
final Map<String, Object> map = jwtUtils.parseToken(token);
final Integer userId = (Integer) map.get(USER_ID);
if (Objects.isNull(userId)) {
log.info("userId does not exist");
response.setStatus(HttpStatus.UNAUTHORIZED_401);
return false;
}
long workspaceIdFromToken = ((Number) map.get("workspaceId")).longValue();
final UserLoginLog userLoginLog = userDaoImpl.getLastLoginLog(userId, workspaceIdFromToken);
if (Objects.isNull(userLoginLog) || !userLoginLog.getTokenStatus()) {
log.info("userLoginLog does not exist");
response.setStatus(HttpStatus.UNAUTHORIZED_401);
return false;
}
final Integer expireDate = (Integer) map.get(EXPIRATION);
if (Objects.isNull(expireDate) || currentTimestamp - (long) expireDate * 1000 > 0) {
log.info("user token has expired");
response.setStatus(HttpStatus.UNAUTHORIZED_401);
return false;
}
map.forEach(request::setAttribute);
User user = new User();
user.setUsername((String) map.get("name"));
user.setId((Integer) map.get("id"));
log.debug(
"Setting user to request attributes: userId={}, username={}",
user.getId(),
user.getUsername());
UserContext userContext = new UserContext();
userContext.setUser(user);
userContext.setWorkspaceId(workspaceIdFromToken);
AccessInfo accessInfo = new AccessInfo();
accessInfo.setUsername(user.getUsername());
accessInfo.setWorkspaceName((String) map.get("workspaceName"));
userContext.setAccessInfo(accessInfo);
request.setAttribute(Constants.SESSION_USER_CONTEXT, userContext);
request.setAttribute("userId", userId);
return true;
}