49 行
1.5 KiB
Java
49 行
1.5 KiB
Java
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;
|
|
}
|
|
}
|