diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5bded6e..2205e0a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,27 +2,24 @@ # https://docs.gradle.org/current/userguide/platforms.html#sub::toml-dependencies-format [versions] -com-mysql-mysql-connector-j = "8.0.33" io-jsonwebtoken-jjwt-api = "0.11.5" io-jsonwebtoken-jjwt-impl = "0.11.5" io-jsonwebtoken-jjwt-jackson = "0.11.5" org-mariadb-jdbc-mariadb-java-client = "3.1.4" org-projectlombok-lombok = "1.18.26" -org-springdoc-springdoc-openapi-starter-webmvc-ui = "2.1.0" -org-springframework-boot-spring-boot-starter-data-jpa = "3.1.0" -org-springframework-boot-spring-boot-starter-security = "3.1.0" -org-springframework-boot-spring-boot-starter-test = "3.1.0" -org-springframework-boot-spring-boot-starter-validation = "3.1.0" -org-springframework-boot-spring-boot-starter-web = "3.1.0" +org-springdoc-springdoc-openapi-starter-webmvc-ui = "2.8.9" +org-springframework-boot-spring-boot-starter-data-jpa = "3.5.3" +org-springframework-boot-spring-boot-starter-security = "3.5.3" +org-springframework-boot-spring-boot-starter-test = "3.5.3" +org-springframework-boot-spring-boot-starter-validation = "3.5.3" +org-springframework-boot-spring-boot-starter-web = "3.5.3" org-springframework-security-spring-security-test = "6.1.0" [libraries] -com-mysql-mysql-connector-j = { module = "com.mysql:mysql-connector-j", version.ref = "com-mysql-mysql-connector-j" } io-jsonwebtoken-jjwt-api = { module = "io.jsonwebtoken:jjwt-api", version.ref = "io-jsonwebtoken-jjwt-api" } io-jsonwebtoken-jjwt-impl = { module = "io.jsonwebtoken:jjwt-impl", version.ref = "io-jsonwebtoken-jjwt-impl" } io-jsonwebtoken-jjwt-jackson = { module = "io.jsonwebtoken:jjwt-jackson", version.ref = "io-jsonwebtoken-jjwt-jackson" } org-mariadb-jdbc-mariadb-java-client = { module = "org.mariadb.jdbc:mariadb-java-client", version.ref = "org-mariadb-jdbc-mariadb-java-client" } -org-projectlombok-lombok = { module = "org.projectlombok:lombok", version.ref = "org-projectlombok-lombok" } org-springdoc-springdoc-openapi-starter-webmvc-ui = { module = "org.springdoc:springdoc-openapi-starter-webmvc-ui", version.ref = "org-springdoc-springdoc-openapi-starter-webmvc-ui" } org-springframework-boot-spring-boot-starter-data-jpa = { module = "org.springframework.boot:spring-boot-starter-data-jpa", version.ref = "org-springframework-boot-spring-boot-starter-data-jpa" } org-springframework-boot-spring-boot-starter-security = { module = "org.springframework.boot:spring-boot-starter-security", version.ref = "org-springframework-boot-spring-boot-starter-security" } diff --git a/pom.xml b/pom.xml deleted file mode 100644 index e7c4fb3..0000000 --- a/pom.xml +++ /dev/null @@ -1,106 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 3.1.0 - - - com.bezkoder - autoflow - 0.0.1-SNAPSHOT - spring-security-refresh-token - Spring Security Refresh Token with JWT example in Spring Boot - - 17 - - - - org.springframework.boot - spring-boot-starter-data-jpa - - - - org.springframework.boot - spring-boot-starter-security - - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-validation - - - - io.jsonwebtoken - jjwt-api - 0.11.5 - - - - io.jsonwebtoken - jjwt-impl - 0.11.5 - runtime - - - - io.jsonwebtoken - jjwt-jackson - 0.11.5 - runtime - - - - com.mysql - mysql-connector-j - runtime - - - - org.springframework.boot - spring-boot-starter-test - test - - - - org.springframework.security - spring-security-test - test - - - org.mariadb.jdbc - mariadb-java-client - runtime - - - - org.springdoc - springdoc-openapi-starter-webmvc-ui - 2.1.0 - - - - org.projectlombok - lombok - true - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - diff --git a/src/main/java/kr/re/etri/security/jwt/advice/ErrorMessage.java b/src/main/java/kr/re/etri/security/jwt/advice/ErrorMessage.java index 2f16242..ec40f26 100644 --- a/src/main/java/kr/re/etri/security/jwt/advice/ErrorMessage.java +++ b/src/main/java/kr/re/etri/security/jwt/advice/ErrorMessage.java @@ -1,33 +1,15 @@ package kr.re.etri.security.jwt.advice; +import lombok.AllArgsConstructor; +import lombok.Getter; + import java.util.Date; +@Getter +@AllArgsConstructor public class ErrorMessage { private int statusCode; private Date timestamp; private String message; private String description; - - public ErrorMessage(int statusCode, Date timestamp, String message, String description) { - this.statusCode = statusCode; - this.timestamp = timestamp; - this.message = message; - this.description = description; - } - - public int getStatusCode() { - return statusCode; - } - - public Date getTimestamp() { - return timestamp; - } - - public String getMessage() { - return message; - } - - public String getDescription() { - return description; - } -} \ No newline at end of file +} diff --git a/src/main/java/kr/re/etri/security/jwt/models/RefreshToken.java b/src/main/java/kr/re/etri/security/jwt/models/RefreshToken.java index 7b274df..751c28b 100644 --- a/src/main/java/kr/re/etri/security/jwt/models/RefreshToken.java +++ b/src/main/java/kr/re/etri/security/jwt/models/RefreshToken.java @@ -3,9 +3,18 @@ package kr.re.etri.security.jwt.models; import java.time.Instant; import jakarta.persistence.*; - -@Entity(name = "refreshtoken") +import lombok.Getter; +import lombok.Setter; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.Comment; + +@Comment("새로고침 토큰") +@Entity(name = "tb_refreshtoken") +@Getter +@Setter +@NoArgsConstructor public class RefreshToken { + @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; @@ -19,40 +28,4 @@ public class RefreshToken { @Column(nullable = false) private Instant expiryDate; - - public RefreshToken() { - } - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public User getUser() { - return user; - } - - public void setUser(User user) { - this.user = user; - } - - public String getToken() { - return token; - } - - public void setToken(String token) { - this.token = token; - } - - public Instant getExpiryDate() { - return expiryDate; - } - - public void setExpiryDate(Instant expiryDate) { - this.expiryDate = expiryDate; - } - } diff --git a/src/main/java/kr/re/etri/security/jwt/models/Role.java b/src/main/java/kr/re/etri/security/jwt/models/Role.java index 8d23764..08d2428 100644 --- a/src/main/java/kr/re/etri/security/jwt/models/Role.java +++ b/src/main/java/kr/re/etri/security/jwt/models/Role.java @@ -1,39 +1,32 @@ package kr.re.etri.security.jwt.models; import jakarta.persistence.*; +import lombok.Getter; +import lombok.Setter; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import org.hibernate.annotations.Comment; @Entity -@Table(name = "roles") +@Table(name = "tb_role") +@Comment("역할") +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor public class Role { + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + @Comment("아이디") private Integer id; @Enumerated(EnumType.STRING) @Column(length = 20) + @Comment("이름") private ERole name; - public Role() { - - } - public Role(ERole name) { this.name = name; } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public ERole getName() { - return name; - } - - public void setName(ERole name) { - this.name = name; - } -} \ No newline at end of file +} diff --git a/src/main/java/kr/re/etri/security/jwt/models/User.java b/src/main/java/kr/re/etri/security/jwt/models/User.java index 1c10ffb..49d687f 100644 --- a/src/main/java/kr/re/etri/security/jwt/models/User.java +++ b/src/main/java/kr/re/etri/security/jwt/models/User.java @@ -7,20 +7,33 @@ import jakarta.persistence.*; import jakarta.validation.constraints.Email; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Size; +import lombok.Getter; +import lombok.Setter; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import org.hibernate.annotations.Comment; @Entity -@Table(name = "users", - uniqueConstraints = { - @UniqueConstraint(columnNames = "username"), - @UniqueConstraint(columnNames = "email") - }) +@Comment("유저") +@Table(name = "tb_user", + uniqueConstraints = { + @UniqueConstraint(columnNames = "username"), + @UniqueConstraint(columnNames = "email") + }) +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor public class User { + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + @Comment("아이디") private Long id; @NotBlank @Size(max = 20) + @Comment("유저이름") private String username; @NotBlank @@ -33,57 +46,14 @@ public class User { private String password; @ManyToMany(fetch = FetchType.LAZY) - @JoinTable(name = "user_roles", - joinColumns = @JoinColumn(name = "user_id"), - inverseJoinColumns = @JoinColumn(name = "role_id")) + @JoinTable(name = "user_roles", + joinColumns = @JoinColumn(name = "user_id"), + inverseJoinColumns = @JoinColumn(name = "role_id")) private Set roles = new HashSet<>(); - public User() { - } - public User(String username, String email, String password) { this.username = username; this.email = email; this.password = password; } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - public Set getRoles() { - return roles; - } - - public void setRoles(Set roles) { - this.roles = roles; - } } diff --git a/src/main/java/kr/re/etri/security/jwt/payload/request/LoginRequest.java b/src/main/java/kr/re/etri/security/jwt/payload/request/LoginRequest.java index abb0452..5144c88 100644 --- a/src/main/java/kr/re/etri/security/jwt/payload/request/LoginRequest.java +++ b/src/main/java/kr/re/etri/security/jwt/payload/request/LoginRequest.java @@ -1,27 +1,16 @@ package kr.re.etri.security.jwt.payload.request; import jakarta.validation.constraints.NotBlank; +import lombok.Getter; +import lombok.Setter; +@Getter +@Setter public class LoginRequest { + @NotBlank private String username; @NotBlank private String password; - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } } diff --git a/src/main/java/kr/re/etri/security/jwt/payload/response/MessageResponse.java b/src/main/java/kr/re/etri/security/jwt/payload/response/MessageResponse.java index f808880..843399b 100644 --- a/src/main/java/kr/re/etri/security/jwt/payload/response/MessageResponse.java +++ b/src/main/java/kr/re/etri/security/jwt/payload/response/MessageResponse.java @@ -1,17 +1,12 @@ package kr.re.etri.security.jwt.payload.response; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@AllArgsConstructor public class MessageResponse { private String message; - - public MessageResponse(String message) { - this.message = message; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } } diff --git a/src/main/java/kr/re/etri/security/jwt/payload/response/UserInfoResponse.java b/src/main/java/kr/re/etri/security/jwt/payload/response/UserInfoResponse.java index 523eecb..06a6147 100644 --- a/src/main/java/kr/re/etri/security/jwt/payload/response/UserInfoResponse.java +++ b/src/main/java/kr/re/etri/security/jwt/payload/response/UserInfoResponse.java @@ -1,45 +1,17 @@ package kr.re.etri.security.jwt.payload.response; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + import java.util.List; +@Getter +@Setter +@AllArgsConstructor public class UserInfoResponse { private Long id; private String username; private String email; private List roles; - - public UserInfoResponse(Long id, String username, String email, List roles) { - this.id = id; - this.username = username; - this.email = email; - this.roles = roles; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - - public List getRoles() { - return roles; - } } diff --git a/src/main/java/kr/re/etri/security/jwt/security/jwt/AuthTokenFilter.java b/src/main/java/kr/re/etri/security/jwt/security/jwt/AuthTokenFilter.java index 8cbef7e..8e9b5ca 100644 --- a/src/main/java/kr/re/etri/security/jwt/security/jwt/AuthTokenFilter.java +++ b/src/main/java/kr/re/etri/security/jwt/security/jwt/AuthTokenFilter.java @@ -7,6 +7,7 @@ import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -18,6 +19,7 @@ import org.springframework.web.filter.OncePerRequestFilter; import kr.re.etri.security.jwt.security.services.UserDetailsServiceImpl; +@Slf4j public class AuthTokenFilter extends OncePerRequestFilter { @Autowired private JwtUtils jwtUtils; @@ -25,7 +27,6 @@ public class AuthTokenFilter extends OncePerRequestFilter { @Autowired private UserDetailsServiceImpl userDetailsService; - private static final Logger logger = LoggerFactory.getLogger(AuthTokenFilter.class); @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index a6a931e..0b07387 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -8,7 +8,7 @@ spring.jpa.hibernate.ddl-auto= create-drop # App Properties bezkoder.app.jwtCookieName= bezkoder-jwt bezkoder.app.jwtRefreshCookieName= bezkoder-jwt-refresh -bezkoder.app.jwtSecret= ======================BezKoder=Spring=========================== +bezkoder.app.jwtSecret= 275511b31c520562d69802ce4a913773102563891563a24062f44b3f312ca2bd034440e81836d1b4ccf4195f43db4c81a4e489a41f1ae0967afe468c9a361f4d #bezkoder.app.jwtExpirationMs= 86400000 #bezkoder.app.jwtRefreshExpirationMs= 86400000