spring-boot-realworld-examp.../src/main/java/io/spring/infrastructure/service/DefaultJwtService.java

51 lines
1.5 KiB
Java
Raw Normal View History

2017-08-08 10:01:13 +07:00
package io.spring.infrastructure.service;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
2017-08-18 16:08:27 +07:00
import io.spring.core.service.JwtService;
import io.spring.core.user.User;
2017-08-08 20:14:14 +07:00
import org.springframework.beans.factory.annotation.Autowired;
2017-08-08 10:01:13 +07:00
import org.springframework.beans.factory.annotation.Value;
2017-08-08 20:14:14 +07:00
import org.springframework.stereotype.Component;
2017-08-08 10:01:13 +07:00
import java.util.Date;
import java.util.Optional;
2017-08-08 20:14:14 +07:00
@Component
2017-08-08 10:01:13 +07:00
public class DefaultJwtService implements JwtService {
private String secret;
private int sessionTime;
2017-08-08 20:14:14 +07:00
@Autowired
2017-08-08 10:01:13 +07:00
public DefaultJwtService(@Value("${jwt.secret}") String secret,
@Value("${jwt.sessionTime}") int sessionTime) {
this.secret = secret;
this.sessionTime = sessionTime;
}
@Override
2017-08-18 16:08:27 +07:00
public String toToken(User user) {
2017-08-08 10:01:13 +07:00
return Jwts.builder()
2017-08-18 16:08:27 +07:00
.setSubject(user.getId())
2017-08-08 10:01:13 +07:00
.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);
}
}