You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.4 KiB
Java
39 lines
1.4 KiB
Java
package com.yau.digitalrmb.institutionidentity.application;
|
|
|
|
import com.yau.digitalrmb.shared.api.ErrorCode;
|
|
import com.yau.digitalrmb.shared.exception.BusinessException;
|
|
import org.springframework.security.oauth2.jwt.Jwt;
|
|
|
|
public class InstitutionKeySubject {
|
|
private final long userId;
|
|
private final long schoolId;
|
|
private final long classId;
|
|
|
|
public InstitutionKeySubject(long userId, long schoolId, long classId) {
|
|
this.userId = userId;
|
|
this.schoolId = schoolId;
|
|
this.classId = classId;
|
|
}
|
|
|
|
public static InstitutionKeySubject from(Jwt jwt) {
|
|
return new InstitutionKeySubject(requiredLong(jwt, "userId"), requiredLong(jwt, "schoolId"),
|
|
requiredLong(jwt, "classId"));
|
|
}
|
|
|
|
private static long requiredLong(Jwt jwt, String claim) {
|
|
Object value = jwt.getClaims().get(claim);
|
|
if (value == null) {
|
|
throw new BusinessException(ErrorCode.UNAUTHORIZED, "Token缺少" + claim);
|
|
}
|
|
try {
|
|
return Long.parseLong(String.valueOf(value));
|
|
} catch (NumberFormatException exception) {
|
|
throw new BusinessException(ErrorCode.UNAUTHORIZED, "Token中的" + claim + "格式不正确");
|
|
}
|
|
}
|
|
|
|
public long getUserId() { return userId; }
|
|
public long getSchoolId() { return schoolId; }
|
|
public long getClassId() { return classId; }
|
|
}
|