diff --git a/src/main/java/net/gepafin/tendermanagement/config/jwt/TokenProvider.java b/src/main/java/net/gepafin/tendermanagement/config/jwt/TokenProvider.java index 1964bd1c..27887e26 100644 --- a/src/main/java/net/gepafin/tendermanagement/config/jwt/TokenProvider.java +++ b/src/main/java/net/gepafin/tendermanagement/config/jwt/TokenProvider.java @@ -5,6 +5,8 @@ import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import io.jsonwebtoken.security.Keys; import jakarta.annotation.PostConstruct; +import net.gepafin.tendermanagement.entities.UserEntity; + import org.apache.commons.lang3.time.DateUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -39,7 +41,7 @@ public class TokenProvider { log.info("JWT Secret Key initialized."); } - public String createToken(Authentication authentication, Boolean rememberMe) { + public String createToken(Authentication authentication, Boolean rememberMe, UserEntity user) { String authorities = authentication.getAuthorities().stream() .map(GrantedAuthority::getAuthority) .collect(Collectors.joining(",")); @@ -55,9 +57,14 @@ public class TokenProvider { validity = new Date(now + (this.tokenValidityInSeconds * 1000)); log.info("Creating token with standard validity of {} seconds.", this.tokenValidityInSeconds); } + + String payload = authentication.getName(); + if(user != null) { + payload += ":"+user.getId(); + } String token = Jwts.builder() - .setSubject(authentication.getName()) + .setSubject(payload) .claim("auth", authorities) .signWith(key, SignatureAlgorithm.HS512) .setExpiration(validity) diff --git a/src/main/java/net/gepafin/tendermanagement/model/util/JWTToken.java b/src/main/java/net/gepafin/tendermanagement/model/util/JWTToken.java index 53596d25..a57b7d59 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/util/JWTToken.java +++ b/src/main/java/net/gepafin/tendermanagement/model/util/JWTToken.java @@ -1,11 +1,9 @@ package net.gepafin.tendermanagement.model.util; import com.fasterxml.jackson.annotation.JsonProperty; + import lombok.Data; -import lombok.Getter; -import lombok.Setter; import net.gepafin.tendermanagement.model.response.LoginResponse; -import net.gepafin.tendermanagement.model.response.UserResponseBean; /** * JWTToken diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/AuthenticationService.java b/src/main/java/net/gepafin/tendermanagement/service/impl/AuthenticationService.java index 022f3775..1d76fc3c 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/AuthenticationService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/AuthenticationService.java @@ -19,7 +19,6 @@ import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; @Service @@ -33,9 +32,6 @@ public class AuthenticationService { @Autowired private UserRepository userRepository; - @Autowired - private PasswordEncoder passwordEncoder; - @Autowired private RoleDao roleDao; @@ -51,13 +47,13 @@ public class AuthenticationService { Authentication authentication = this.authenticationManager.authenticate(authenticationToken); SecurityContextHolder.getContext().setAuthentication(authentication); log.info("Authentication successful for email: {}", loginReq.getEmail()); - String token = tokenProvider.createToken(authentication, loginReq.getRememberMe()); - log.info("JWT token generated for email: {}", loginReq.getEmail()); UserEntity user = userRepository.findByEmail(loginReq.getEmail()); if (user == null) { log.error("User not found for email: {}", loginReq.getEmail()); throw new CustomValidationException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.USER_NOT_FOUND_MSG)); } + String token = tokenProvider.createToken(authentication, loginReq.getRememberMe(), user); + log.info("JWT token generated for email: {}", loginReq.getEmail()); RoleResponseBean roleResponseBean = roleDao.convertRoleEntityToRoleResponse(user.getRoleEntity()); JWTToken jwtToken = new JWTToken(token, new LoginResponse(user.getId(), user.getEmail(), user.getFirstName(), user.getLastName(), roleResponseBean, user.getPhoneNumber(), user.getAddress(), user.getOrganization(),