Access token, Refresh token
✅ Access token, Refresh token with body
## ✅ Access token, Refresh token with body ### ✔️ Reference - easy to follow ver - <https://www.bezkoder.com/spring-boot-refresh-token-jwt/> - refresh token and logout - <https://medium.com/@max.difranco/user-registration-and-jwt-authentication-with-spring-boot-3-part-3-refresh-token-logout-ea0704f1b436> ### ☑️ RefreshToken Entity ```java @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class RefreshToken { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name="token_id") private int tokenId; @Column(name= "token") private String token; @Column(name= "expiry_date") private Instant expiryDate; @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id", nullable = false) private User user; @Builder public RefreshToken(int tokenId, String token, Instant expiryDate, User user) { this.tokenId = tokenId; this.token = token; this.expiryDate = expiryDate; this.user = user; } public static RefreshToken toEntity(String token, Instant expiryDate, User user){ return RefreshToken.builder() .token(token) .expiryDate(expiryDate) .user(user) .build(); } public void updateToken(String token, Instant expiryDate){ this.token = token; this.expiryDate = expiryDate; } } ``` ### ☑️ TokenRefreshRequest DTO ```java public record TokenRefreshRequest ( String refreshToken ){ } ``` ### ☑️ LoginResponse DTO ```java @Builder public record LoginResponse ( String email, String accessToken, String refreshToken ){ } ``` ### ☑️ JwtResponse DTO ```java public record JwtResponse ( String accessToken, String refreshToken ){ public JwtResponse(String accessToken, String refreshToken) { this.accessToken = accessToken; this.refreshToken = refreshToken; } } ``` ### ☑️ Auth Controller ```java @Transactional @Operation(summary = "login", description = "Login API with email and password") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "Login success") }) @PostMapping(value = "/login") public Response This post is licensed under CC BY 4.0 by the author.