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 companyId, String deviceId, String recordId) { return jwtUtil.generate(deviceId, Map.of( "companyId", companyId, "deviceId", deviceId, "recordId", recordId )); } public boolean verifyTokenPayload(String token, String companyId, String deviceId) { try { var claims = jwtUtil.parse(token); String claimCompanyId = firstNonNull(claims.get("companyId", String.class), claims.get("company_id", String.class)); String claimDeviceId = firstNonNull(claims.get("deviceId", String.class), claims.get("device_id", String.class)); return companyId.equals(claimCompanyId) && 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; } }