public boolean preHandle()

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