
로 만들고 싶었음
아래 교안 형태와 다르게 나는 Home을 만들지 않았기 때문에, 메서드 반환타입을 JSON 응답으로 반환해주는 것으로 바꾸어야 했다.
if (userId == null) { redirectAttributes.addFlashAttribute("error", "이메일 또는 비밀번호가 올바르지 않습니다."); return "redirect:/login"; } // 로그인 성공 시 Session 생성 HttpSession session = request.getSession(); UserResponseDto loginUser = loginService.findById(userId); session.setAttribute(Const.LOGIN_USER, loginUser); // 로그인 성공 후 홈 화면으로 이동 return "redirect:/home"; }
@RestController @RequiredArgsConstructor public class LoginController { private final LoginService loginService; @PostMapping("/login") public ResponseEntity<LoginResponseDto> login( @Valid @RequestBody LoginRequestDto dto, HttpServletRequest request . . .
// 로그인 성공시 로직 // Session의 Default Value는 true이다. // Session이 request에 존재하면 기존의 Session을 반환하고, // Session이 request에 없을 경우에 새로 Session을 생성한다. HttpSession session = request.getSession(); // 회원 정보 조회 UserResponseDto loginUser = loginService.findById(userId); // Session에 로그인 회원 정보를 저장한다. session.setAttribute(Const.LOGIN_USER, loginUser); // 로그인 성공시 return ResponseEntity.ok(responseDto);로그인 성공시에 대한 json 반환타입은 구현하였다.
다만, 이럴 경우 로그인 실패시 리다이렉트가 불가능하다.
// 실패시 로그인페이지로
if (userId == null) {
return "redirect:/login";
}
리다이렉트를 하려면 결국 수정하기 전의 형태로 돌아가야 하기 때문이다.
| 방식 | 설명 | 코드 예제 |
|---|---|---|
| JSON 기반 리다이렉트 응답 (RESTful API 방식) | ResponseEntity<> 유지하면서 프론트에서 리다이렉트 처리 | ✅ @RestController 유지 |
| 서버 측 리다이렉트 (Spring MVC 방식) | "redirect:/login"을 반환하여 서버에서 직접 리다이렉트 | ✅ @Controller 사용 |
로그인 실패시의 로직을 수정하여 예외응답 401을 뜨게 만들어주었다.
// 실패시 401 UNAUTHORIZED 응답 반환 if (userId == null) { return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); }
User findByEmail(String email);
vs
Optional<User> findByEmail(String email);
User findByEmail(String email);
로 UserRepository에 작성을 하고 났더니 LoginService-Email 조회 부분에서 계속해서 오류가 났다.
조원들에게 물어본 결과
email을 조회했을때, null인 경우를 대비해 optional이라는 래퍼클래스로 감싸야 한다고 한다.