Skip to content

Commit f5f7159

Browse files
committed
fix 병 yml 파일 병 & test코드í© 완료
2 parents 64676a3 + a115257 commit f5f7159

File tree

16 files changed

+269
-57
lines changed

16 files changed

+269
-57
lines changed

.idea/encodings.xml

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/gradle.xml

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/modules.xml

Lines changed: 0 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/modules/backend.main.iml

Lines changed: 0 additions & 8 deletions
This file was deleted.

backend/build.gradle.kts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import org.gradle.kotlin.dsl.implementation
2-
31
plugins {
42
java
53
id("org.springframework.boot") version "3.5.6"
@@ -49,6 +47,11 @@ dependencies {
4947
implementation("org.springframework.boot:spring-boot-starter-validation")
5048
implementation("org.springframework.boot:spring-boot-starter-mail")
5149
implementation("org.springframework.boot:spring-boot-starter-data-redis")
50+
51+
implementation("io.jsonwebtoken:jjwt-api:0.13.0")
52+
implementation("io.jsonwebtoken:jjwt-impl:0.13.0")
53+
implementation("io.jsonwebtoken:jjwt-jackson:0.13.0")
54+
implementation("org.springframework.boot:spring-boot-starter-security")
5255
}
5356

5457
tasks.withType<Test> {

backend/src/main/java/com/backend/domain/user/controller/AuthController.java

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,29 @@
11
package com.backend.domain.user.controller;
22

33
import com.backend.domain.user.service.EmailService;
4+
import com.backend.domain.user.service.JwtService;
45
import com.backend.global.exception.ErrorCode;
56
import com.backend.global.response.ApiResponse;
67
import jakarta.mail.MessagingException;
8+
import jakarta.servlet.http.Cookie;
9+
import jakarta.servlet.http.HttpServletResponse;
10+
import jakarta.validation.Valid;
11+
import jakarta.validation.constraints.Email;
12+
import jakarta.validation.constraints.NotBlank;
713
import lombok.RequiredArgsConstructor;
14+
import org.springframework.beans.factory.annotation.Value;
815
import org.springframework.web.bind.annotation.PostMapping;
916
import org.springframework.web.bind.annotation.RequestBody;
10-
import org.springframework.web.bind.annotation.RequestParam;
1117
import org.springframework.web.bind.annotation.RestController;
1218

1319
@RestController
1420
@RequiredArgsConstructor
1521
public class AuthController {
1622
private final EmailService emailService;
23+
private final JwtService jwtService;
1724

25+
@Value("${jwt.access-token-expiration-in-milliseconds}")
26+
private int tokenValidityMilliSeconds;
1827

1928
/**
2029
* 입력받은 이메일에 인증코드를 보냅니다.
@@ -54,4 +63,39 @@ public ApiResponse<String> verifyAuthCode(@RequestBody VerifyRequest request)
5463

5564
}
5665

66+
67+
/**
68+
* 로그인
69+
*/
70+
record LoginRequest(
71+
@NotBlank(message = "이메일은 필수 입력값 입니다.")
72+
@Email(message = "이메일 형식이 아닙니다.")
73+
String email,
74+
75+
@NotBlank(message = "비밀번호는 필수 입력값 입니다.")
76+
String password
77+
){
78+
79+
}
80+
81+
82+
83+
@PostMapping("/api/login")
84+
public ApiResponse<String> login(
85+
@Valid @RequestBody LoginRequest loginRequest,
86+
HttpServletResponse response
87+
){
88+
String token = jwtService.login(loginRequest.email, loginRequest.password);
89+
90+
Cookie cookie = new Cookie("token", token);
91+
cookie.setHttpOnly(true); // JavaScript 접근 방지 (XSS 공격 방어)
92+
cookie.setSecure(true); //HTTPS 통신에서만 전송
93+
cookie.setPath("/");
94+
95+
cookie.setMaxAge(tokenValidityMilliSeconds);
96+
97+
response.addCookie(cookie); //응답에 쿠키 추가
98+
99+
return ApiResponse.success("success");
100+
}
57101
}

backend/src/main/java/com/backend/domain/user/controller/UserController.java

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,10 @@
44
import com.backend.domain.user.entity.User;
55
import com.backend.domain.user.service.UserService;
66
import com.backend.global.response.ApiResponse;
7-
import com.backend.global.response.ResponseCode;
87
import jakarta.mail.MessagingException;
98
import jakarta.validation.Valid;
109
import jakarta.validation.constraints.Email;
1110
import jakarta.validation.constraints.NotBlank;
12-
import jakarta.validation.constraints.NotNull;
1311
import lombok.RequiredArgsConstructor;
1412
import org.springframework.web.bind.annotation.*;
1513

@@ -163,31 +161,4 @@ public ApiResponse<RestoreResponse> restoreUser(
163161
return ApiResponse.success(new RestoreResponse(new UserDto(user)));
164162
}
165163

166-
/*
167-
*//**
168-
* 로그인
169-
*//*
170-
record LoginRequest(
171-
@NotBlank(message = "이메일은 필수 입력값 입니다.")
172-
@Email(message = "이메일 형식이 아닙니다.")
173-
String email,
174-
175-
@NotBlank(message = "비밀번호는 필수 입력값 입니다.")
176-
String password
177-
){
178-
179-
}
180-
181-
record LoginResponse(
182-
183-
){
184-
185-
}
186-
187-
@PostMapping("/api/user/login")
188-
public ApiResponse<LoginResponse> login(
189-
@Valid @RequestBody LoginRequest loginRequest
190-
){
191-
192-
}*/
193164
}

backend/src/main/java/com/backend/domain/user/entity/User.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
package com.backend.domain.user.entity;
22

33
import jakarta.persistence.*;
4-
import jakarta.validation.constraints.NotBlank;
5-
import jakarta.validation.constraints.NotNull;
64
import lombok.Getter;
75
import lombok.NoArgsConstructor;
86
import org.hibernate.annotations.Where;
9-
import org.springframework.cglib.core.Local;
107
import org.springframework.data.annotation.CreatedDate;
118
import org.springframework.data.annotation.LastModifiedDate;
129
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

backend/src/main/java/com/backend/domain/user/service/EmailService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public void sendEmail(String email) throws MessagingException {
4646
helper.setSubject("[임시 서비스 이름] 회원가입 인증 코드입니다.");
4747

4848
// 이메일 본문 (HTML 형식으로 보냄)
49-
String content = "<h2>안녕하세요. [임시 서비스 이름]입니다.</h2>"
49+
String content = "<h2>안녕하세요. [PortfolioIQ]입니다.</h2>"
5050
+ "<p>아래 6자리 인증 코드를 인증 창에 입력해 주세요.</p>"
5151
+ "<div style='font-size: 24px; font-weight: bold; color: #1e88e5;'>"
5252
+ authCode
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.backend.domain.user.service;
2+
3+
import com.backend.domain.user.entity.User;
4+
import com.backend.domain.user.repository.UserRepository;
5+
import com.backend.domain.user.util.JwtUtil;
6+
import jakarta.validation.constraints.Email;
7+
import jakarta.validation.constraints.NotBlank;
8+
import lombok.RequiredArgsConstructor;
9+
import org.springframework.stereotype.Service;
10+
11+
@Service
12+
@RequiredArgsConstructor
13+
public class JwtService {
14+
private final UserRepository userRepository;
15+
private final JwtUtil jwtUtil;
16+
17+
public String login(@NotBlank(message = "이메일은 필수 입력값 입니다.") @Email(message = "이메일 형식이 아닙니다.") String email, @NotBlank(message = "비밀번호는 필수 입력값 입니다.") String password) {
18+
User user = userRepository.findByEmail(email).orElse(null);
19+
if(user.getPassword().equals(password)) {
20+
//email에 대응하는 비밀번호가 맞다면 jwt토큰 발급
21+
return jwtUtil.createToken(user.getEmail(), user.getName());
22+
}else{
23+
return null;
24+
}
25+
}
26+
}

0 commit comments

Comments
 (0)