source: jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/JwtServiceImpl.java@ d8b6c91

main
Last change on this file since d8b6c91 was d8b6c91, checked in by 223021 <daniel.ilievski.2@…>, 7 weeks ago

Initial commit - implementirano registracija i logiranje so Spring Security i JSON Web Token-i vo backend-ot kako i navbar i formi za istoto vo frontend-ot

  • Property mode set to 100644
File size: 2.5 KB
Line 
1package mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.impl;
2
3import io.jsonwebtoken.Claims;
4import io.jsonwebtoken.Jwts;
5import io.jsonwebtoken.SignatureAlgorithm;
6import io.jsonwebtoken.io.Decoders;
7import io.jsonwebtoken.security.Keys;
8import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.intef.JwtService;
9import org.springframework.security.core.userdetails.UserDetails;
10import org.springframework.stereotype.Service;
11
12import java.security.Key;
13import java.util.Date;
14import java.util.Map;
15import java.util.function.Function;
16
17@Service
18public class JwtServiceImpl implements JwtService {
19 private final static String SECRET_KEY = "7191b1d33668d4a2316a02f9a40798b77bccd22173bd882c93a0a916a5e921d1";
20
21 public String generateToken(UserDetails userDetails) {
22 return Jwts.builder().setSubject(userDetails.getUsername())
23 .setIssuedAt(new Date())
24 .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24))
25 .signWith(getSigninKey(), SignatureAlgorithm.HS256)
26 .compact();
27 }
28
29 @Override
30 public String generateRefreshToken(Map<String, Object> extraClaims, UserDetails userDetails) {
31 return Jwts.builder().setClaims(extraClaims).setSubject(userDetails.getUsername())
32 .setIssuedAt(new Date())
33 .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24 * 7))
34 .signWith(getSigninKey(), SignatureAlgorithm.HS256)
35 .compact();
36 }
37
38 private Key getSigninKey() {
39 byte[] key = Decoders.BASE64.decode(SECRET_KEY);
40 return Keys.hmacShaKeyFor(key);
41 }
42
43 public String extractUsername(String token) {
44 return extractClaim(token, Claims::getSubject);
45 }
46
47 private Claims extractAllClaims(String token) {
48 return Jwts.parserBuilder().setSigningKey(getSigninKey()).build().parseClaimsJws(token).getBody();
49 }
50
51 public <T> T extractClaim(String token, Function<Claims, T> claimsResolver) {
52 final Claims claims = extractAllClaims(token);
53 return claimsResolver.apply(claims);
54 }
55
56 public boolean isTokenValid(String token, UserDetails userDetails) {
57 final String username = extractUsername(token);
58 return username.equals(userDetails.getUsername()) && !isTokenExpired(token);
59 }
60
61
62 private boolean isTokenExpired(String token) {
63 return extractClaim(token, Claims::getExpiration).before(new Date());
64 }
65}
Note: See TracBrowser for help on using the repository browser.