Программисты JAVA общаются здесь
Anonymous
Метод getSubject() возвращает значение null при попытке извлечь из утверждений JWT
Сообщение
Anonymous » 21 окт 2025, 00:43
Когда я создаю строку токена JWT и пытаюсь извлечь логин (тему), метод getLogin() возвращает значение null. getLogin() просто оборачивает Claims.getSubject().
JWTService.java
Код: Выделить всё
@Service
public class JWTService {
private static final SecretKey key = Keys.secretKeyFor(SignatureAlgorithm.HS256);
@Value("${jwt.token-validity}")
private Integer tokenValidity;
@Nullable
public String getLogin(@NotNull String token) {
return extractClaim(token, Claims::getSubject);
}
private Claims getClaims(@NotNull String token) {
return Jwts
.parserBuilder()
.setSigningKey(key)
.build()
.parseClaimsJws(token)
.getBody();
}
private T extractClaim(@NotNull String token, @NotNull Function claimsResolver) {
return claimsResolver.apply(getClaims(token));
}
public String generateToken(@NotNull String login) {
return generateToken(login, new HashMap());
}
public String generateToken(@NotNull String login, @NotNull HashMap extraClaims) {
return Jwts.builder()
.setSubject(login)
.setClaims(extraClaims)
.setIssuedAt(new Date())
.setExpiration(new Date(System.currentTimeMillis() + tokenValidity * 1000))
.signWith(key)
.compact();
}
}
JWTServiceTest.java
Код: Выделить всё
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@FieldDefaults(level = AccessLevel.PRIVATE)
public class JWTServiceTest {
@Autowired
JWTService jwtService;
@Test
public void whenGivenTestLoginAndJwtGenerated_ThenExtractTestUsername(){
String jwt = jwtService.generateToken("test");
assertEquals("test", jwtService.getLogin(jwt));
}
}
Код: Выделить всё
expected: but was:
Expected :test
Actual :null
Я пытался найти здесь те же темы, но не нашел решения.
Подробнее здесь:
https://stackoverflow.com/questions/763 ... jwt-claims
1760996619
Anonymous
Когда я создаю строку токена JWT и пытаюсь извлечь логин (тему), метод getLogin() возвращает значение null. getLogin() просто оборачивает Claims.getSubject(). JWTService.java [code]@Service public class JWTService { private static final SecretKey key = Keys.secretKeyFor(SignatureAlgorithm.HS256); @Value("${jwt.token-validity}") private Integer tokenValidity; @Nullable public String getLogin(@NotNull String token) { return extractClaim(token, Claims::getSubject); } private Claims getClaims(@NotNull String token) { return Jwts .parserBuilder() .setSigningKey(key) .build() .parseClaimsJws(token) .getBody(); } private T extractClaim(@NotNull String token, @NotNull Function claimsResolver) { return claimsResolver.apply(getClaims(token)); } public String generateToken(@NotNull String login) { return generateToken(login, new HashMap()); } public String generateToken(@NotNull String login, @NotNull HashMap extraClaims) { return Jwts.builder() .setSubject(login) .setClaims(extraClaims) .setIssuedAt(new Date()) .setExpiration(new Date(System.currentTimeMillis() + tokenValidity * 1000)) .signWith(key) .compact(); } } [/code] JWTServiceTest.java [code]@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @FieldDefaults(level = AccessLevel.PRIVATE) public class JWTServiceTest { @Autowired JWTService jwtService; @Test public void whenGivenTestLoginAndJwtGenerated_ThenExtractTestUsername(){ String jwt = jwtService.generateToken("test"); assertEquals("test", jwtService.getLogin(jwt)); } } [/code] [code]expected: but was: Expected :test Actual :null [/code] Я пытался найти здесь те же темы, но не нашел решения. Подробнее здесь: [url]https://stackoverflow.com/questions/76357178/getsubject-method-rerturn-null-when-trying-to-extract-from-jwt-claims[/url]