package org.cmh.backend.Utils;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class JwtVerifyAspect {
    @Before("@annotation(JwtVerify)&&args(..)")
    public void verifyJwtToken(JoinPoint joinPoint) throws JwtValidationException {
        Object[] args = joinPoint.getArgs();
        for (Object arg : args) {
            if (arg instanceof JwtRequest jwtRequest) {
                String token = jwtRequest.getToken();
                if (!JwtUtil.isTokenValid(token)) {
                    throw new JwtValidationException("请求未正确携带身份令牌");
                }
                return;  // 只接受第一个 JwtRequest 对象，收到后不再校验其他参数
            }
            // JWTRequest对象优先，否则再检查其他字符串参数
            if (arg instanceof String token){
                if (JwtUtil.isTokenValid(token)){
                    // 验证成功就直接退出。
                    return;
                }
            }
        }
        throw new JwtValidationException("请求未正确携带身份令牌");
    }
}

