-
Notifications
You must be signed in to change notification settings - Fork 31
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[nathan & jerry] 웹서버 4단계 - 쿠키를 이용한 로그인 구현 #63
Open
jeremy0405
wants to merge
13
commits into
codesquad-members-2022:nathan-jerry
Choose a base branch
from
jeremy0405:step4
base: nathan-jerry
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
13 commits
Select commit
Hold shift + click to select a range
d63694d
refactor: Request, Response Class package 이동(util -> webserver)
nathan29849 e54e632
refactor: String httpMethod -> HttpMethod Enum class로 변경
jeremy0405 ff4dbae
feat: 로그인 유저 확인하고 response에 Set-Cookie 헤더 작성
jeremy0405 9b79ba7
feat: Cookie를 이용한 logout 기능 구현
nathan29849 ae90448
feat: 컨트롤러 매핑을 위한 httpMethod, path 정보를 가진 ControllerMapper 작성
jeremy0405 4709c99
feat: FirstController, Controller 인터페이스 작성
jeremy0405 e8c75ef
feat: GET index.html 요청 처리하는 HomeController 작성
jeremy0405 29556df
feat: UserJoinController로 POST /user/create 처리
nathan29849 139a5fb
feat: login, logout Controller 작성
jeremy0405 7fe704c
refactor: Response 클래스 범용적으로 설계 및 변경
nathan29849 6d28924
add: controller에 log 추가
jeremy0405 db2daee
feat: sessionId uuid로 변경
jeremy0405 3798a82
docs: 4단계 README 작성
jeremy0405 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
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,11 @@ | ||
package controller; | ||
|
||
import java.io.IOException; | ||
import webserver.Request; | ||
import webserver.Response; | ||
|
||
public interface Controller { | ||
|
||
void process(Request request, Response response) throws IOException; | ||
|
||
} |
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,39 @@ | ||
package controller; | ||
|
||
import java.io.IOException; | ||
import java.util.Map; | ||
import java.util.concurrent.ConcurrentHashMap; | ||
import org.slf4j.Logger; | ||
import org.slf4j.LoggerFactory; | ||
import webserver.ControllerMapper; | ||
import webserver.HttpMethod; | ||
import webserver.Request; | ||
import webserver.Response; | ||
|
||
public class FirstController { | ||
|
||
private static final FirstController instance = new FirstController(); | ||
|
||
private final Map<ControllerMapper, Controller> map = new ConcurrentHashMap<>(); | ||
private Logger log = LoggerFactory.getLogger(FirstController.class); | ||
|
||
private FirstController() { | ||
map.put(new ControllerMapper(HttpMethod.POST, "/user/create"), UserJoinController.getInstance()); | ||
map.put(new ControllerMapper(HttpMethod.GET, "/user/logout"), UserLogoutController.getInstance()); | ||
map.put(new ControllerMapper(HttpMethod.POST, "/user/login"), UserLoginController.getInstance()); | ||
} | ||
|
||
public void run(Request request, Response response) throws IOException { | ||
Controller controller = map.get(new ControllerMapper(request.getHttpMethod(), request.getPath())); | ||
if (controller == null) { | ||
controller = HomeController.getInstance(); | ||
} | ||
log.debug("call {}", controller); | ||
controller.process(request, response); | ||
} | ||
|
||
public static FirstController getInstance() { | ||
return instance; | ||
} | ||
|
||
} |
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,30 @@ | ||
package controller; | ||
|
||
import java.io.File; | ||
import java.io.IOException; | ||
import java.nio.file.Files; | ||
import org.slf4j.Logger; | ||
import org.slf4j.LoggerFactory; | ||
import webserver.HttpStatus; | ||
import webserver.Request; | ||
import webserver.Response; | ||
|
||
public class HomeController implements Controller { | ||
|
||
private static final HomeController instance = new HomeController(); | ||
|
||
private Logger log = LoggerFactory.getLogger(HomeController.class); | ||
private HomeController() { | ||
} | ||
|
||
public static HomeController getInstance() { | ||
return instance; | ||
} | ||
|
||
@Override | ||
public void process(Request request, Response response) throws IOException { | ||
byte[] body = Files.readAllBytes(new File("./webapp" + request.getPath()).toPath()); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
log.debug("path: {}", request.getPath()); | ||
response.write(body, HttpStatus.OK); | ||
} | ||
} |
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,57 @@ | ||
package controller; | ||
|
||
import db.DataBase; | ||
import java.io.File; | ||
import java.io.IOException; | ||
import java.nio.file.Files; | ||
import java.util.ArrayList; | ||
import java.util.List; | ||
import java.util.Map; | ||
import model.User; | ||
import org.slf4j.Logger; | ||
import org.slf4j.LoggerFactory; | ||
import util.Pair; | ||
import webserver.HttpStatus; | ||
import webserver.Request; | ||
import webserver.Response; | ||
|
||
public class UserJoinController implements Controller { | ||
|
||
private static final UserJoinController instance = new UserJoinController(); | ||
|
||
private Logger log = LoggerFactory.getLogger(UserJoinController.class); | ||
|
||
private UserJoinController() { | ||
} | ||
|
||
public static UserJoinController getInstance() { | ||
return instance; | ||
} | ||
|
||
@Override | ||
public void process(Request request, Response response) throws IOException { | ||
Map<String, String> parsedBody = request.takeParsedBody(); | ||
log.debug("POST BODY: {}", parsedBody); | ||
User user = new User( | ||
parsedBody.get("userId"), | ||
parsedBody.get("password"), | ||
parsedBody.get("name"), | ||
parsedBody.get("email") | ||
); | ||
saveUser(user, response); | ||
} | ||
|
||
private void saveUser(User user, Response response) { | ||
List<Pair> pairs = new ArrayList<>(); | ||
if (DataBase.validateDuplicatedId(user)) { | ||
DataBase.addUser(user); | ||
log.debug("SavedUser: {}", user); | ||
pairs.add(new Pair("Location", "http://localhost:8080/index.html")); | ||
response.write(HttpStatus.FOUND, pairs); | ||
return; | ||
} | ||
log.debug("Save Fail: {}", user); | ||
pairs.add(new Pair("Location", "http://localhost:8080/user/form.html")); | ||
response.write(HttpStatus.FOUND, pairs); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 실패해도 |
||
} | ||
} |
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,50 @@ | ||
package controller; | ||
|
||
import db.DataBase; | ||
import java.util.ArrayList; | ||
import java.util.List; | ||
import java.util.Map; | ||
import model.User; | ||
import org.slf4j.Logger; | ||
import org.slf4j.LoggerFactory; | ||
import util.Pair; | ||
import webserver.HttpSession; | ||
import webserver.HttpStatus; | ||
import webserver.Request; | ||
import webserver.Response; | ||
|
||
public class UserLoginController implements Controller { | ||
|
||
private static final UserLoginController instance = new UserLoginController(); | ||
|
||
private Logger log = LoggerFactory.getLogger(UserLoginController.class); | ||
|
||
private UserLoginController() { | ||
} | ||
|
||
public static UserLoginController getInstance() { | ||
return instance; | ||
} | ||
|
||
@Override | ||
public void process(Request request, Response response) { | ||
Map<String, String> parsedBody = request.takeParsedBody(); | ||
log.debug("POST BODY: {}", parsedBody); | ||
|
||
User user = DataBase.findUserById(parsedBody.get("userId")); | ||
List<Pair> pairs = new ArrayList<>(); | ||
|
||
if (user != null && user.getPassword().equals(parsedBody.get("password"))) { | ||
log.debug("login 성공"); | ||
pairs.add(new Pair("Location", "http://localhost:8080/index.html")); | ||
pairs.add(new Pair("Set-Cookie", "sessionId=" + HttpSession.makeUUID(user.getUserId()) + "; max-age=20; Path=/; HttpOnly")); | ||
response.write(HttpStatus.FOUND, pairs); | ||
return; | ||
} | ||
log.debug("login 실패"); | ||
pairs.add(new Pair("Location", "http://localhost:8080/user/login_failed.html")); | ||
response.write(HttpStatus.FOUND, pairs); | ||
} | ||
|
||
|
||
} |
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 controller; | ||
|
||
import java.util.ArrayList; | ||
import java.util.List; | ||
import org.slf4j.Logger; | ||
import org.slf4j.LoggerFactory; | ||
import util.Pair; | ||
import webserver.HttpStatus; | ||
import webserver.Request; | ||
import webserver.Response; | ||
|
||
public class UserLogoutController implements Controller { | ||
|
||
private static final UserLogoutController instance = new UserLogoutController(); | ||
|
||
private Logger log = LoggerFactory.getLogger(UserLogoutController.class); | ||
|
||
private UserLogoutController() { | ||
} | ||
|
||
public static UserLogoutController getInstance() { | ||
return instance; | ||
} | ||
|
||
@Override | ||
public void process(Request request, Response response) { | ||
List<Pair> pairs = new ArrayList<>(); | ||
pairs.add(new Pair("Location", "http://localhost:8080/index.html")); | ||
pairs.add(new Pair("Set-Cookie", "sessionId=; max-age=-1; Path=/")); | ||
response.write(HttpStatus.FOUND, pairs); | ||
|
||
log.debug("logout 성공"); | ||
} | ||
|
||
} |
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
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.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이미 여기서 하나의 객체만 보관해서 로직을 처리할때 꺼내는 구조로 되기 때문에, 굳이 하부 컨트롤러들이 싱글턴일 이유가 없어 보이기도 합니다.