jwt service
This commit is contained in:
@@ -2,6 +2,10 @@ package io.spring.application;
|
||||
|
||||
import io.spring.application.user.UserData;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
public interface JwtService {
|
||||
String toToken(UserData userData);
|
||||
|
||||
Optional<String> getSubFromToken(String token);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
package io.spring.infrastructure.service;
|
||||
|
||||
import io.jsonwebtoken.Claims;
|
||||
import io.jsonwebtoken.Jws;
|
||||
import io.jsonwebtoken.Jwts;
|
||||
import io.jsonwebtoken.SignatureAlgorithm;
|
||||
import io.jsonwebtoken.SignatureException;
|
||||
import io.spring.application.JwtService;
|
||||
import io.spring.application.user.UserData;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.Optional;
|
||||
|
||||
@Service
|
||||
public class DefaultJwtService implements JwtService {
|
||||
private String secret;
|
||||
private int sessionTime;
|
||||
|
||||
public DefaultJwtService(@Value("${jwt.secret}") String secret,
|
||||
@Value("${jwt.sessionTime}") int sessionTime) {
|
||||
this.secret = secret;
|
||||
this.sessionTime = sessionTime;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toToken(UserData userData) {
|
||||
return Jwts.builder()
|
||||
.setSubject(userData.getUsername())
|
||||
.setExpiration(expireTimeFromNow())
|
||||
.signWith(SignatureAlgorithm.HS512, secret)
|
||||
.compact();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<String> getSubFromToken(String token) {
|
||||
try {
|
||||
Jws<Claims> claimsJws = Jwts.parser().setSigningKey(secret).parseClaimsJws(token);
|
||||
return Optional.ofNullable(claimsJws.getBody().getSubject());
|
||||
} catch (Exception e) {
|
||||
return Optional.empty();
|
||||
}
|
||||
}
|
||||
|
||||
private Date expireTimeFromNow() {
|
||||
return new Date(System.currentTimeMillis() + sessionTime * 1000);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user