source: src/main/java/com/example/rezevirajmasa/demo/config/UserAuthProvider.java@ 8ca35dc

main
Last change on this file since 8ca35dc was 8ca35dc, checked in by Aleksandar Panovski <apano77@…>, 4 months ago

Done with stupid timeslots

  • Property mode set to 100644
File size: 2.7 KB
Line 
1package com.example.rezevirajmasa.demo.config;
2
3import com.auth0.jwt.JWT;
4import com.auth0.jwt.JWTVerifier;
5import com.auth0.jwt.algorithms.Algorithm;
6import com.auth0.jwt.interfaces.DecodedJWT;
7import com.example.rezevirajmasa.demo.dto.UserDto;
8import com.example.rezevirajmasa.demo.service.UserService;
9import io.jsonwebtoken.Claims;
10import io.jsonwebtoken.Jwts;
11import jakarta.annotation.PostConstruct;
12import lombok.RequiredArgsConstructor;
13import org.springframework.beans.factory.annotation.Value;
14import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
15import org.springframework.security.core.Authentication;
16import org.springframework.security.core.userdetails.UserDetails;
17import org.springframework.stereotype.Component;
18
19import java.util.*;
20import java.util.function.Function;
21
22@RequiredArgsConstructor
23@Component
24public class UserAuthProvider {
25 @Value("${security.jwt.token.secret-key:secret:value}")
26 private String secretKey;
27
28 private final UserService userService;
29
30 @PostConstruct
31 protected void init() {
32 secretKey = Base64.getEncoder().encodeToString(secretKey.getBytes());
33 }
34
35 public String generateToken(UserDetails userDetails){
36 Map<String, Object> claims = new HashMap<>();
37 return createToken(userDetails.getUsername());
38 }
39
40 public String createToken(String login) {
41 Date now = new Date();
42 Date validity = new Date(now.getTime() + 3_600_000);
43 return JWT.create()
44 .withIssuer(login)
45 .withIssuedAt(now)
46 .withExpiresAt(validity)
47 .sign(Algorithm.HMAC256(secretKey));
48 }
49
50 public Authentication validateToken(String token) {
51 JWTVerifier verifier = JWT.require(Algorithm.HMAC256(secretKey)).build();
52
53 DecodedJWT decoded = verifier.verify(token);
54
55 UserDto user = userService.findByEmail(decoded.getIssuer());
56
57 return new UsernamePasswordAuthenticationToken(user, null, Collections.emptyList());
58 }
59
60 public String extractUsername(String token) {
61 return extractClaim(token, Claims::getSubject);
62 }
63
64 public Date extractExpiration(String token) {
65 return extractClaim(token, Claims::getExpiration);
66 }
67
68 public <T> T extractClaim(String token, Function<Claims, T> claimsResolver) {
69 final Claims claims = extractAllClaims(token);
70 return claimsResolver.apply(claims);
71 }
72
73 private Claims extractAllClaims(String token) {
74 return Jwts.parser().setSigningKey(secretKey).parseClaimsJws(token).getBody();
75 }
76
77 private Boolean isTokenExpired(String token) {
78 return extractExpiration(token).before(new Date());
79 }
80}
Note: See TracBrowser for help on using the repository browser.