package com.xuqm.license.service; import com.xuqm.common.security.JwtUtil; import org.springframework.stereotype.Service; import java.util.Map; @Service public class LicenseAuthService { private final JwtUtil jwtUtil; public LicenseAuthService(JwtUtil jwtUtil) { this.jwtUtil = jwtUtil; } public String generateToken(String appKey, String deviceId, String recordId) { return jwtUtil.generate(deviceId, Map.of( "appKey", appKey, "deviceId", deviceId, "recordId", recordId )); } public boolean verifyTokenPayload(String token, String appKey, String deviceId) { try { var claims = jwtUtil.parse(token); String claimAppKey = claims.get("appKey", String.class); String claimDeviceId = firstNonNull(claims.get("deviceId", String.class), claims.get("device_id", String.class)); return appKey.equals(claimAppKey) && deviceId.equals(claimDeviceId); } catch (Exception e) { return false; } } public String getRecordIdFromToken(String token) { try { var claims = jwtUtil.parse(token); return firstNonNull(claims.get("recordId", String.class), claims.get("record_id", String.class)); } catch (Exception e) { return null; } } private static String firstNonNull(String value, String fallback) { return value != null ? value : fallback; } }