slipp / jwp-book

자바 웹 프로그래밍 학습을 위한 저장소
383 stars 130 forks source link

133페이지 '4.2.1.5 요구사항 5 - 로그인하기'의 요구사항 마지막 줄에 #4

Closed javajigi closed 7 years ago

javajigi commented 7 years ago

133페이지 '4.2.1.5 요구사항 5 - 로그인하기'의 요구사항 마지막 줄에 '로그인이 실패하면 Cookie 헤더값이 logined=false로 전달되어야 한다.' 라고 쓰여져 있는데요, 4장의 코드에서 로그인 실패시 logined=false로 만들어 주는 부분을 찾지 못하겠습니다.

실례가 되지 않는다면, 어느 곳에 logined=false로 만들어 주는 부분이 있는지 알려 주세요.


메일을 통해 권순규님의 질문에 답변한 내용을 정리한 글이다.

javajigi commented 7 years ago

현재 구현되어 있는 코드는 로그인 실패시 cookie 헤더값을 false로 전달하지 않아도 정상적으로 동작합니다. 만약 false로 전달하는 구현을 하고 싶다면 다음과 같이 구현하시면 됩니다.

https://github.com/slipp/web-application-server/blob/was-step1-bad-version/src/main/java/webserver/RequestHandler.java 코드 기준으로 설명할께요.

77~82라인 소스

if (user.login(params.get("password"))) {
    DataOutputStream dos = new DataOutputStream(out);
    response302LoginSuccessHeader(dos);
} else {
    responseResource(out, "/user/login_failed.html");
}

위 코드를 다음과 같이 구현한다.

if (user.login(params.get("password"))) {
    DataOutputStream dos = new DataOutputStream(out);
    response302LoginSuccessHeader(dos);
} else {
    DataOutputStream dos = new DataOutputStream(out);
    response302LoginFailureHeader(dos);
}

위와 같이 response302LoginFailureHeader 메소드를 추가한 후 다음과 같이 구현하시면 됩니다.

private void response302LoginFailureHeader(DataOutputStream dos) {
    try {
        dos.writeBytes("HTTP/1.1 302 Redirect \r\n");
        dos.writeBytes("Set-Cookie: logined=false \r\n");
        dos.writeBytes("Location: /user/login_failed.html \r\n");
        dos.writeBytes("\r\n");
    } catch (IOException e) {
        log.error(e.getMessage());
    }
}