Index: backend/pom.xml
===================================================================
--- backend/pom.xml	(revision 00cbc3569522a813a57d38d549fca10107fec9e3)
+++ backend/pom.xml	(revision d9b20e24eb6d2730ec9bbacdb75651ddf9957613)
@@ -81,4 +81,19 @@
             <scope>provided</scope>
         </dependency>
+        <dependency>
+            <groupId>io.jsonwebtoken</groupId>
+            <artifactId>jjwt-api</artifactId>
+            <version>0.11.5</version>
+        </dependency>
+        <dependency>
+            <groupId>io.jsonwebtoken</groupId>
+            <artifactId>jjwt-impl</artifactId>
+            <version>0.11.5</version>
+        </dependency>
+        <dependency>
+            <groupId>io.jsonwebtoken</groupId>
+            <artifactId>jjwt-jackson</artifactId>
+            <version>0.11.5</version>
+        </dependency>
 
 
Index: backend/src/main/java/com/tradingmk/backend/service/UserService.java
===================================================================
--- backend/src/main/java/com/tradingmk/backend/service/UserService.java	(revision 00cbc3569522a813a57d38d549fca10107fec9e3)
+++ backend/src/main/java/com/tradingmk/backend/service/UserService.java	(revision d9b20e24eb6d2730ec9bbacdb75651ddf9957613)
@@ -1,36 +1,106 @@
 package com.tradingmk.backend.service;
 
+import ch.qos.logback.classic.net.SyslogAppender;
 import com.tradingmk.backend.model.User;
 import com.tradingmk.backend.repository.UserRepository;
+import io.jsonwebtoken.Claims;
+import io.jsonwebtoken.Jwts;
+import io.jsonwebtoken.SignatureAlgorithm;
+import io.jsonwebtoken.io.Decoders;
+import io.jsonwebtoken.security.Keys;
+import jakarta.websocket.Decoder;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.userdetails.UserDetails;
 import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.stereotype.Service;
 
+import java.security.Key;
+import java.util.Base64;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.function.Function;
+
 @Service
 public class UserService {
+    private static final String SECRET_KEY = "JRVhRnKR9b64xWQS01/1RYmfnCrfZpPztXZwcQ7KVyvDjNW2K41meGFT0IZtkuDS";
 
-    @Autowired
-    private UserRepository userRepository;
+//    @Autowired
+//    private UserRepository userRepository;
+//
+//    @Autowired
+//    private PasswordEncoder passwordEncoder;
+//
+//    public User register(User user) {
+//        if (userRepository.findByUsername(user.getUsername()).isPresent()) {
+//            throw new RuntimeException("User already exists with username: " + user.getUsername());
+//        }
+//        user.setPassword(passwordEncoder.encode(user.getPassword()));
+//        return userRepository.save(user);
+//    }
+//
+//    public User login(String username, String rawPassword) {
+//        return userRepository.findByUsername(username)
+//                .filter(user -> passwordEncoder.matches(rawPassword, user.getPassword()))
+//                .orElse(null);
+//    }
 
-    @Autowired
-    private PasswordEncoder passwordEncoder;
-
-    public User register(User user) {
-        if (userRepository.findByUsername(user.getUsername()).isPresent()) {
-            throw new RuntimeException("User already exists with username: " + user.getUsername());
-        }
-        user.setPassword(passwordEncoder.encode(user.getPassword()));
-        return userRepository.save(user);
+    public String extractUsername(String token) {
+        return extractClaim(token, Claims::getSubject);
     }
 
-    public User login(String username, String rawPassword) {
-        return userRepository.findByUsername(username)
-                .filter(user -> passwordEncoder.matches(rawPassword, user.getPassword()))
-                .orElse(null);
+    public <T> T extractClaim(String token, Function<Claims, T> claimsResolver) {
+        final Claims claims = extractAllClaims(token);
+        return claimsResolver.apply(claims);
+        //extract claim from token
     }
 
-    public String extractUsername(String token) {
-        return null;
+    //generate token without extra claims ->
+    public String generateToken(UserDetails userDetails) {
+        return generateToken(new HashMap<>(), userDetails);
+    }
 
+    public String generateToken(Map<String, Object> extraClaims, UserDetails userDetails) {
+        //if you want to pass data to store data in token
+        return Jwts
+                .builder()
+                .setClaims(extraClaims)
+                .setSubject(userDetails.getUsername())
+                .setIssuedAt(new Date(System.currentTimeMillis()))
+                .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 24))
+                .signWith(getSignInKey(), SignatureAlgorithm.HS256)
+                .compact();//compact genertaes the token
     }
+
+
+    //check the token
+    public boolean isTokenValid(String token, UserDetails userDetails) {
+        final String username = extractUsername(token);
+        return (username.equals(userDetails.getUsername())) && !isTokenExpired(token);
+    }
+
+    private boolean isTokenExpired(String token) {
+        return extractExpiration(token).before(new Date());//before today
+    }
+
+    private Date extractExpiration(String token) {
+        return extractClaim(token,Claims::getExpiration);
+    }
+
+    public Claims extractAllClaims(String token) {
+        return Jwts
+                .parserBuilder()
+                .setSigningKey(getSignInKey())
+                .build()
+                .parseClaimsJws(token)
+                .getBody();
+        //extract ** all ** claims from token
+    }
+
+    private Key getSignInKey() {
+        byte[] keyBytes = Decoders.BASE64.decode(SECRET_KEY);
+        return Keys.hmacShaKeyFor(keyBytes);
+    }
+
+
 }
