diff --git a/spring-auth-1/initial/src/main/java/cholog/auth/ui/BasicLoginController.java b/spring-auth-1/initial/src/main/java/cholog/auth/ui/BasicLoginController.java index 9f956bb5..217e7c53 100644 --- a/spring-auth-1/initial/src/main/java/cholog/auth/ui/BasicLoginController.java +++ b/spring-auth-1/initial/src/main/java/cholog/auth/ui/BasicLoginController.java @@ -31,8 +31,9 @@ public BasicLoginController(AuthService authService) { @GetMapping("/members/me/basic") public ResponseEntity findMyInfo(HttpServletRequest request) { // TODO: authorization 헤더의 Basic 값에 있는 email과 password 추출 (hint: authorizationExtractor 사용) - String email = ""; - String password = ""; + AuthInfo authInfo = authorizationExtractor.extract(request); + String email = authInfo.getEmail(); + String password = authInfo.getPassword(); if (authService.checkInvalidLogin(email, password)) { throw new AuthorizationException(); diff --git a/spring-auth-1/initial/src/main/java/cholog/auth/ui/SessionLoginController.java b/spring-auth-1/initial/src/main/java/cholog/auth/ui/SessionLoginController.java index a88c9509..bf3d5c71 100644 --- a/spring-auth-1/initial/src/main/java/cholog/auth/ui/SessionLoginController.java +++ b/spring-auth-1/initial/src/main/java/cholog/auth/ui/SessionLoginController.java @@ -5,6 +5,7 @@ import cholog.auth.dto.MemberResponse; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpSession; +import org.springframework.http.HttpRequest; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -35,15 +36,14 @@ public SessionLoginController(AuthService authService) { */ @PostMapping("/login/session") public ResponseEntity sessionLogin(HttpServletRequest request, HttpSession session) { - // TODO: HttpRequest로 받은 email과 password 추출 - String email = ""; - String password = ""; + String email = request.getParameter("email"); + String password = request.getParameter("password"); if (authService.checkInvalidLogin(email, password)) { throw new AuthorizationException(); } - // TODO: Session에 인증 정보 저장 (key: SESSION_KEY, value: email값) + session.setAttribute(SESSION_KEY, email); return ResponseEntity.ok().build(); } @@ -57,8 +57,7 @@ public ResponseEntity sessionLogin(HttpServletRequest request, HttpSession */ @GetMapping("/members/me/session") public ResponseEntity findMyInfo(HttpSession session) { - // TODO: Session을 통해 인증 정보 조회 (key: SESSION_KEY) - String email = ""; + String email = (String) session.getAttribute(SESSION_KEY); MemberResponse member = authService.findMember(email); return ResponseEntity.ok().body(member); } diff --git a/spring-auth-1/initial/src/main/java/cholog/auth/ui/TokenLoginController.java b/spring-auth-1/initial/src/main/java/cholog/auth/ui/TokenLoginController.java index ed0f81ff..de09a5ab 100644 --- a/spring-auth-1/initial/src/main/java/cholog/auth/ui/TokenLoginController.java +++ b/spring-auth-1/initial/src/main/java/cholog/auth/ui/TokenLoginController.java @@ -8,9 +8,7 @@ import cholog.auth.infrastructure.BearerAuthorizationExtractor; import jakarta.servlet.http.HttpServletRequest; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; @RestController public class TokenLoginController { @@ -35,10 +33,10 @@ public TokenLoginController(AuthService authService) { * } */ @PostMapping("/login/token") - public ResponseEntity tokenLogin() { - // TODO: email, password 정보를 가진 TokenRequest 값을 메서드 파라미터로 받아오기 (hint: @RequestBody) - TokenRequest tokenRequest = null; - TokenResponse tokenResponse = authService.createToken(tokenRequest); + public ResponseEntity tokenLogin(@RequestBody TokenRequest tokenRequest) { + TokenRequest tokenRequest1 = tokenRequest; + + TokenResponse tokenResponse = authService.createToken(tokenRequest1); return ResponseEntity.ok().body(tokenResponse); } @@ -51,8 +49,7 @@ public ResponseEntity tokenLogin() { */ @GetMapping("/members/me/token") public ResponseEntity findMyInfo(HttpServletRequest request) { - // TODO: authorization 헤더의 Bearer 값을 추출 (hint: authorizationExtractor 사용) - String token = ""; + String token = authorizationExtractor.extract(request); MemberResponse member = authService.findMemberByToken(token); return ResponseEntity.ok().body(member); } diff --git a/spring-mvc-1/initial/src/main/java/cholog/MemberController.java b/spring-mvc-1/initial/src/main/java/cholog/MemberController.java index 08322a4e..0a8199d8 100644 --- a/spring-mvc-1/initial/src/main/java/cholog/MemberController.java +++ b/spring-mvc-1/initial/src/main/java/cholog/MemberController.java @@ -1,18 +1,33 @@ package cholog; import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; @Controller public class MemberController { - - public String world() { + @GetMapping("/hello") + public String world(@RequestParam(name = "name", required = false) String name, Model model) { // TODO: /hello 요청 시 resources/templates/static.html 페이지가 응답할 수 있도록 설정하세요. // TODO: 쿼리 파라미터로 name 요청이 들어왔을 때 해당 값을 hello.html에서 사용할 수 있도록 하세요. - return null; + if (name == null){ + // 쿼리 파라미터가 없는 경우 + return "static"; + } else { + // 쿼리 파라미터가 있는 경우. + model.addAttribute("name", name); + return "hello"; + } + + } + @GetMapping("/json") + @ResponseBody public Person json() { // TODO: /json 요청 시 {"name": "brown", "age": 20} 데이터를 응답할 수 있도록 설정하세요. - return null; + return new Person("brown", 20); } } diff --git a/spring-mvc-1/initial/src/main/resources/static/hi.html b/spring-mvc-1/initial/src/main/resources/static/index.html similarity index 100% rename from spring-mvc-1/initial/src/main/resources/static/hi.html rename to spring-mvc-1/initial/src/main/resources/static/index.html diff --git a/spring-mvc-1/initial/src/main/resources/templates/static.html b/spring-mvc-1/initial/src/main/resources/static/static.html similarity index 100% rename from spring-mvc-1/initial/src/main/resources/templates/static.html rename to spring-mvc-1/initial/src/main/resources/static/static.html diff --git a/spring-mvc-2/initial/src/main/java/cholog/MemberController.java b/spring-mvc-2/initial/src/main/java/cholog/MemberController.java index 5a380e7a..927d98a4 100644 --- a/spring-mvc-2/initial/src/main/java/cholog/MemberController.java +++ b/spring-mvc-2/initial/src/main/java/cholog/MemberController.java @@ -5,12 +5,11 @@ import java.util.List; import java.util.Objects; import java.util.concurrent.atomic.AtomicLong; + +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.*; @Controller public class MemberController { @@ -19,9 +18,9 @@ public class MemberController { private final AtomicLong index = new AtomicLong(1); @PostMapping("/members") - public ResponseEntity create() { + public ResponseEntity create(@RequestBody Member member) { // TODO: member 정보를 받아서 생성한다. - Member newMember = Member.toEntity(null, index.getAndIncrement()); + Member newMember = Member.toEntity(member, index.getAndIncrement()); members.add(newMember); return ResponseEntity.created(URI.create("/members/" + newMember.getId())).build(); } @@ -29,31 +28,32 @@ public ResponseEntity create() { @GetMapping("/members") public ResponseEntity> read() { // TODO: 저장된 모든 member 정보를 반환한다. - return null; + return new ResponseEntity<>(members, HttpStatus.OK); } @PutMapping("/members/{id}") - public ResponseEntity update() { + public ResponseEntity update(@PathVariable Long id, @RequestBody Member newMember) { // TODO: member의 수정 정보와 url 상의 id 정보를 받아 member 정보를 수정한다. Member member = members.stream() - .filter(it -> Objects.equals(it.getId(), null)) + .filter(it -> Objects.equals(it.getId(), id)) .findFirst() .orElseThrow(RuntimeException::new); - member.update(null); + member.update(newMember); + //return new ResponseEntity<>(null, HttpStatus.NO_CONTENT); 이건 왜 안되는지? return null; } @DeleteMapping("/members/{id}") - public ResponseEntity delete() { + public ResponseEntity delete(@PathVariable Long id) { // TODO: url 상의 id 정보를 받아 member를 삭제한다. Member member = members.stream() - .filter(it -> Objects.equals(it.getId(), null)) + .filter(it -> Objects.equals(it.getId(), id)) .findFirst() .orElseThrow(RuntimeException::new); members.remove(member); - return null; + return new ResponseEntity<>(HttpStatus.NO_CONTENT); } }