반응형
Recent Posts
Recent Comments
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Real Vectorism. 훨씬 더 입체적으로...

JwtUtil 본문

Java (based by Spring Boot 2)

JwtUtil

grast 2024. 3. 24. 15:49
반응형

뭔가가 계속 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);
	}
}

 

반응형
Comments