Real Vectorism. 훨씬 더 입체적으로...
JwtUtil 본문
반응형
뭔가가 계속 Deprecated 되었다고 해서 아예 그냥 복붙해서 쓰는 용도로 정리해버림
@Component
public class JwtUtil {
@Value("${jjwt.issuer}") private String issuer;
@Value("${jjwt.secret}") private String secret;
@Value("${jjwt.expiration}") private String expiration;
private SecretKey secretKey;
@PostConstruct
public void init() {
this.secretKey = Keys.hmacShaKeyFor(this.secret.getBytes());
}
public Claims getAllClaimsFromToken(String token) {
return Jwts.parser()
.requireIssuer(this.issuer)
.verifyWith(this.secretKey)
.build()
.parseSignedClaims(token)
.getPayload();
}
public String getUsernameFromToken(String token) {
return getAllClaimsFromToken(token).getSubject();
}
public Date getExpirationDateFromToken(String token) {
return getAllClaimsFromToken(token).getExpiration();
}
private Boolean isTokenExpired(String token) {
final Date expiration = getExpirationDateFromToken(token);
return expiration.before(new Date());
}
public String generateToken(UserDetails userDetails) {
Map<String, Object> claims = new HashMap<>();
claims.put("authorities", userDetails.getAuthorities());
return doGenerateToken(claims, userDetails.getUsername());
}
private String doGenerateToken(Map<String, Object> claims, String username) {
long expiration = Long.parseLong(expiration);
final Date createdDate = new Date();
final Date expirationDate = new Date(createdDate.getTime() + expiration * 1000);
return Jwts.builder()
.claims(claims)
.subject(username)
.issuer(this.issuer)
.issuedAt(createdDate)
.expiration(expirationDate)
.signWith(this.secretKey)
.compact();
}
public Boolean validateToken(String token) {
return !isTokenExpired(token);
}
}
반응형
'Java (based by Spring Boot 2)' 카테고리의 다른 글
개발단계에서 Svelte 프로젝트 자동 빌드 (0) | 2024.06.27 |
---|---|
스프링 웹플럭스 기반 SSL 적용 (0) | 2024.06.14 |
스프링 웹플럭스에서 CSRF 토큰 때문에 페이지 요청이 모두 막히는 경우 (0) | 2023.07.26 |
나만 몰랐던 람다식 (0) | 2022.11.20 |
html과 css가 application/json 으로 반환되는 문제 2 (EnableWebflux 어노테이션 관련) (0) | 2022.09.17 |
Comments