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

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

Added no access page for new recruiters and admin panel for granting access

  • Property mode set to 100644
File size: 2.7 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.models.users.User;
9import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.intef.JwtService;
10import org.springframework.security.core.userdetails.UserDetails;
11import org.springframework.stereotype.Service;
12
13import java.security.Key;
14import java.util.Date;
15import java.util.Map;
16import java.util.function.Function;
17
18@Service
19public class JwtServiceImpl implements JwtService {
20 private final static String SECRET_KEY = "7191b1d33668d4a2316a02f9a40798b77bccd22173bd882c93a0a916a5e921d1";
21
22 public String generateToken(User user) {
23 return Jwts.builder().setSubject(user.getUsername())
24 .claim("name", user.getName())
25 .claim("role", user.getRole())
26 .claim("access", user.isHasAccess())
27 .setIssuedAt(new Date())
28 .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24))
29 .signWith(getSigninKey(), SignatureAlgorithm.HS256)
30 .compact();
31 }
32
33 @Override
34 public String generateRefreshToken(Map<String, Object> extraClaims, UserDetails userDetails) {
35 return Jwts.builder().setClaims(extraClaims).setSubject(userDetails.getUsername())
36 .setIssuedAt(new Date())
37 .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24 * 7))
38 .signWith(getSigninKey(), SignatureAlgorithm.HS256)
39 .compact();
40 }
41
42 private Key getSigninKey() {
43 byte[] key = Decoders.BASE64.decode(SECRET_KEY);
44 return Keys.hmacShaKeyFor(key);
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 @Override
57 public String extractUsername(String token) {
58 return extractClaim(token, Claims::getSubject);
59 }
60
61 @Override
62 public boolean isTokenValid(String token, UserDetails userDetails) {
63 final String username = extractUsername(token);
64 return username.equals(userDetails.getUsername()) && !isTokenExpired(token);
65 }
66
67 @Override
68 public boolean isTokenExpired(String token) {
69 return extractClaim(token, Claims::getExpiration).before(new Date());
70 }
71}
Note: See TracBrowser for help on using the repository browser.