/
Chebarik
/
PackageManagement
Обзор
Документация
Войти
/
Chebarik
/
PackageManagement
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/main/java/com/packagemanagement/infrastructure/security/JwtTokenProvider.java
78 строк
2 KB
Николай Мехоношин
Implemented non functional requirements
14 апр 2026, 18:37
14 апр 2026, 18:37
2e86838
Код
Авторство
О чём код?
package com.packagemanagement.infrastructure.security; import com.packagemanagement.domain.model.User; import io.jsonwebtoken.Claims; import io.jsonwebtoken.JwtException; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.security.Keys; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import javax.crypto.SecretKey; import java.nio.charset.StandardCharsets; import java.util.Date; @Component public class JwtTokenProvider { private static final Logger log = LoggerFactory.getLogger(JwtTokenProvider.class); private final SecretKey secretKey; private final long accessTokenExpiration; public JwtTokenProvider( @Value("${jwt.secret}") String secret, @Value("${jwt.expiration-ms:3600000}") long accessTokenExpiration) { this.secretKey = Keys.hmacShaKeyFor(secret.getBytes(StandardCharsets.UTF_8)); this.accessTokenExpiration = accessTokenExpiration; } public String generateToken(User user) { Date now = new Date(); Date expiryDate = new Date(now.getTime() + accessTokenExpiration); return Jwts.builder() .subject(user.getUsername()) .claim("role", user.getRole().getSpringRole()) .claim("userId", user.getId()) .issuedAt(now) .expiration(expiryDate) .signWith(secretKey) .compact(); } public boolean validateToken(String token) { try { Jwts.parser() .verifyWith(secretKey) .build() .parseSignedClaims(token); return true; } catch (JwtException | IllegalArgumentException e) { log.warn("Invalid JWT token: {}", e.getMessage()); return false; } } public String extractUsername(String token) { return parseClaims(token).getSubject(); } public String extractRole(String token) { return parseClaims(token).get("role", String.class); } public long getAccessTokenExpiration() { return accessTokenExpiration / 1000; } private Claims parseClaims(String token) { return Jwts.parser() .verifyWith(secretKey) .build() .parseSignedClaims(token) .getPayload(); } }