package com.baiyue.integration.security; import com.baiyue.common.core.api.ResultCode; import com.baiyue.common.core.exception.BizException; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; @Component public class InternalServiceTokenGuard { private final byte[] expectedToken; public InternalServiceTokenGuard(@Value("${baiyue.security.internal-service-token}") String token) { if (token == null || token.getBytes(StandardCharsets.UTF_8).length < 32) { throw new IllegalStateException("INTERNAL_SERVICE_TOKEN 至少需要 32 字节"); } this.expectedToken = token.getBytes(StandardCharsets.UTF_8); } public void verify(String actualToken) { byte[] actual = actualToken == null ? new byte[0] : actualToken.getBytes(StandardCharsets.UTF_8); if (!MessageDigest.isEqual(expectedToken, actual)) { throw new BizException(ResultCode.UNAUTHORIZED, "内部服务令牌无效"); } } }