-
Notifications
You must be signed in to change notification settings - Fork 309
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[톰캣 구현하기 - 1, 2단계] 준팍(박준현) 미션 제출합니다. (#379)
* test: IOStreamTest 완료 * test: FileTest 완료 * test: FileTest path에서 getResource로 방법 변경 * docs : 요구사항 정리 * feat: GET /index.html 응답 기능 구현 * feat: css 지원 기능 구현 * refactor: 클래스 분리 * feat: QueryString 파싱 기능 구현 * refactor: FileExtension 클래스 분리 * refactor: HttpStatus 클래스 분리 * refactor: RequestHandler 클래스 분리 * refactor: RequestHandler Path 로직 수정 * feat: favicon 추가 * feat: HTTP 302 기능 구현 * refactor: 개행 문자 lineSeparator() * refactor: 클래스 분리 * feat: Post method 기능 구현 * feat: 회원 가입 후 리다이렉트 완료 * refacotr: lineSeperator() "\r\n"로 수정 * refactor: 피드백 반영 * refactor: QueryStrings 일급 컬렉션 구현 * feat: HttpCookie 구현 * refactor: 네이밍 변경 * chore: 패키지 분리 * feat: RequestHeaders에 HttpCookie 추가 * refactor: 메서드 분리 * refactor: HandlerMapping 상수화 * feat: 쿠키 값을 스트링으로 반환하는 메서드 구현 * refactor: 메서드 이동 * refactor: 클래스별 역할과 책임 재분배 * refactor: Handler 추가 * feat: Cookie에 JSESSIONID 값 저장 기능 구현 * feat: Session 및 SessionManager 객체 구현 * feat: Session 기능 구현 완료 * feat: User ID AutoIncrement 기능 구현
- Loading branch information
1 parent
68db530
commit 3453b3d
Showing
40 changed files
with
1,272 additions
and
42 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,26 @@ | ||
# 톰캣 구현하기 | ||
|
||
## 1단계 - HTTP 서버 구현하기 | ||
- [x] GET /index.html 응답하기 | ||
- [x] CSS 지원하기 | ||
- [x] Query String 파싱 | ||
|
||
## 2단계 - 로그인 구현하기 | ||
- [x] HTTP Status Code 302 | ||
- [x] 로그인 성공 시, 응답 헤더에 http status code를 302로 반환하고 `/index.html`로 리다이렉트 | ||
- [x] 로그인 실패 시, `401.html`로 리다이렉트 | ||
- [x] POST 방식으로 회원가입 | ||
- [x] `http://localhost:8080/register` 으로 접속하면 회원가입 페이지(`register.html`)를 보여준다. | ||
- [x] 회원가입 페이지를 보여줄 때는 GET을 사용한다. | ||
- [x] 회원가입을 버튼을 누르면 HTTP method를 GET이 아닌 POST를 사용한다. | ||
- [x] 회원가입을 완료하면 `index.html`로 리다이렉트한다. | ||
- [x] 로그인 페이지도 버튼을 눌렀을 때 GET 방식에서 POST 방식으로 전송하도록 변경하자. | ||
- [x] Cookie에 JSESSIONID 값 저장하기 | ||
- [x] 서버에서 HTTP 응답을 전달할 때 응답 헤더에 `Set-Cookie`를 추가하고 `JSESSIONID=656cef62-e3c4-40bc-a8df-94732920ed46` 형태로 값을 전달하면 | ||
클라이언트 요청 헤더의 `Cookie` 필드에 값이 추가된다. | ||
- [x] Cookie 클래스를 추가하고 HTTP Request Header의 Cookie에 `JSESSIONID`가 없으면 HTTP Response Header에 `Set-Cookie`를 반환해주는 기능을 | ||
구현한다. | ||
- [x] Session 구현하기 | ||
- [x] 쿠키에서 전달 받은 JSESSIONID의 값으로 로그인 여부를 체크할 수 있어야 한다. | ||
- [x] 로그인에 성공하면 Session 객체의 값으로 User 객체를 저장해보자. | ||
- [x] 로그인 상태에서 `/login` 페이지에 HTTP GET method로 접근하면 `index.html` 페이지로 리다이렉트 처리한다 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
26 changes: 26 additions & 0 deletions
26
tomcat/src/main/java/nextstep/jwp/controller/UserController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
package nextstep.jwp.controller; | ||
|
||
import nextstep.jwp.model.User; | ||
import nextstep.jwp.service.UserService; | ||
import org.apache.coyote.http11.common.HttpStatus; | ||
import org.apache.coyote.http11.response.ResponseEntity; | ||
|
||
public class UserController { | ||
|
||
private final UserService userService; | ||
|
||
public UserController(UserService userService) { | ||
this.userService = userService; | ||
} | ||
|
||
public User login(String account, String password) { | ||
return userService.login(account, password); | ||
} | ||
|
||
public ResponseEntity signUp(String account, String password, String email) { | ||
userService.save(account, password, email); | ||
|
||
return ResponseEntity.of(HttpStatus.FOUND, "/index"); | ||
} | ||
|
||
} |
9 changes: 5 additions & 4 deletions
9
tomcat/src/main/java/nextstep/jwp/db/InMemoryUserRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,22 +1,23 @@ | ||
package nextstep.jwp.db; | ||
|
||
import nextstep.jwp.model.User; | ||
|
||
import java.util.Map; | ||
import java.util.Optional; | ||
import java.util.concurrent.ConcurrentHashMap; | ||
import java.util.concurrent.atomic.AtomicLong; | ||
import nextstep.jwp.model.User; | ||
|
||
public class InMemoryUserRepository { | ||
|
||
private static final Map<String, User> database = new ConcurrentHashMap<>(); | ||
private static final AtomicLong idCounter = new AtomicLong(); | ||
|
||
static { | ||
final User user = new User(1L, "gugu", "password", "[email protected]"); | ||
final User user = new User("gugu", "password", "[email protected]").persist(idCounter.incrementAndGet()); | ||
database.put(user.getAccount(), user); | ||
} | ||
|
||
public static void save(User user) { | ||
database.put(user.getAccount(), user); | ||
database.put(user.getAccount(), user.persist(idCounter.incrementAndGet())); | ||
} | ||
|
||
public static Optional<User> findByAccount(String account) { | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
35 changes: 35 additions & 0 deletions
35
tomcat/src/main/java/nextstep/jwp/service/UserService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
package nextstep.jwp.service; | ||
|
||
import nextstep.jwp.db.InMemoryUserRepository; | ||
import nextstep.jwp.model.User; | ||
import org.slf4j.Logger; | ||
import org.slf4j.LoggerFactory; | ||
|
||
public class UserService { | ||
|
||
private static final Logger log = LoggerFactory.getLogger(UserService.class); | ||
|
||
public User login(String account, String password) { | ||
User user = InMemoryUserRepository.findByAccount(account) | ||
.orElseThrow(() -> new IllegalArgumentException("존재하지 않는 계정입니다.")); | ||
|
||
checkPassword(password, user); | ||
|
||
return user; | ||
} | ||
|
||
private void checkPassword(String password, User user) { | ||
if (user.checkPassword(password)) { | ||
log.info("User: {}", user); | ||
return; | ||
} | ||
throw new IllegalArgumentException("잘못된 패스워드입니다."); | ||
} | ||
|
||
public void save(String account, String password, String email) { | ||
User user = new User(account, password, email); | ||
InMemoryUserRepository.save(user); | ||
|
||
log.info("User: {}", InMemoryUserRepository.findByAccount(account)); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.