Skip to content

Commit 5c0ad4c

Browse files
authored
Merge pull request #54 from codingbaraGo/feat/authentication/logout/#51
[Auth] 로그아웃 핸들러 개발
2 parents 207f901 + b6d60ba commit 5c0ad4c

6 files changed

Lines changed: 48 additions & 11 deletions

File tree

src/main/java/app/handler/LoginWithPost.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,14 @@ public HandlerResponse handle(QueryParameters params) {
4242
user.getUserRole(),
4343
user.getNickname());
4444

45-
RedirectResponse res = RedirectResponse.to("/");
46-
res.setCookie(
45+
RedirectResponse response = RedirectResponse.to("/");
46+
response.setCookie(
4747
CookieBuilder.of("SID", session.getId())
4848
.path("/")
4949
.httpOnly()
5050
.sameSite(CookieBuilder.SameSite.LAX)
5151
.maxAge(VariableConfig.ABSOLUTE_MS)
5252
);
53-
return res;
53+
return response;
5454
}
5555
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package app.handler;
2+
3+
import http.HttpMethod;
4+
import http.request.HttpRequest;
5+
import http.response.CookieBuilder;
6+
import web.handler.SingleArgHandler;
7+
import web.response.HandlerResponse;
8+
import web.response.RedirectResponse;
9+
import web.session.SessionStorage;
10+
11+
public class LogoutWithPost extends SingleArgHandler<HttpRequest> {
12+
private final SessionStorage sessionManager;
13+
14+
public LogoutWithPost(SessionStorage sessionManager) {
15+
super(HttpMethod.POST, "/user/logout");
16+
this.sessionManager = sessionManager;
17+
}
18+
19+
@Override
20+
public HandlerResponse handle(HttpRequest request) {
21+
String sid = request.getCookieValue("SID").orElse(null);
22+
if (sid != null) sessionManager.invalidate(sid);
23+
24+
RedirectResponse response = RedirectResponse.to("/");
25+
response.setCookie(CookieBuilder.delete("SID").path("/"));
26+
return response;
27+
}
28+
}

src/main/java/config/AppConfig.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package config;
22

3-
import app.handler.HomeHandler;
4-
import app.handler.LoginWithPost;
5-
import app.handler.RegisterWithGet;
6-
import app.handler.RegisterWithPost;
3+
import app.handler.*;
74
import exception.ExceptionHandlerMapping;
85
import exception.handler.ErrorExceptionHandler;
96
import exception.handler.ServiceExceptionHandler;
@@ -90,6 +87,7 @@ public List<WebHandler> webHandlerList() {
9087
registerWithGet(),
9188
registerWithPost(),
9289
loginWithPost(),
90+
logoutWithPost(),
9391
homeHandler())
9492
);
9593
}
@@ -120,6 +118,11 @@ public LoginWithPost loginWithPost() {
120118
() -> new LoginWithPost(sessionStorage()));
121119
}
122120

121+
public LogoutWithPost logoutWithPost(){
122+
return getOrCreate("logoutWithPost",
123+
() -> new LogoutWithPost(sessionStorage()));
124+
}
125+
123126
public HomeHandler homeHandler(){
124127
return getOrCreate("homeHandler", HomeHandler::new);
125128
}

src/main/java/http/response/HttpResponse.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,12 @@ public void setBody(File file, byte[] body) {
7575
setHeader("Content-Length", String.valueOf(body.length));
7676
}
7777

78+
public void redirectTo(String path){
79+
setStatus(HttpStatus.FOUND);
80+
setHeader("Location", path);
81+
setHeader("Content-Length", "0");
82+
}
83+
7884
private String guessContentType(File file) {
7985
String byName = URLConnection.guessContentTypeFromName(file.getName());
8086
if (byName != null) return byName;

src/main/java/web/filter/MemberAuthorizationFilter.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package web.filter;
22

3-
import http.HttpStatus;
43
import http.request.HttpRequest;
54
import http.response.HttpResponse;
65
import web.filter.authentication.UserRole;
@@ -13,9 +12,7 @@ public void runFilter(HttpRequest request, HttpResponse response, FilterChainCon
1312
if(request.getAuthenticationInfo().getRole().equals(UserRole.MEMBER)){
1413
chain.doFilter();
1514
} else {
16-
response.setStatus(HttpStatus.FOUND);
17-
response.setHeader("Location", "/login");
18-
response.setHeader("Content-Length", "0");
15+
response.redirectTo("/login");
1916
}
2017
}
2118
}

src/main/resources/templates/layout/header.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
<li class="header__menu__item">
77
<span class="header__menu__nickname">닉네임: {{userNickname}}</span>
88
</li>
9+
<form action="/user/logout" method="POST">
10+
<button type="submit">로그아웃</button>
11+
</form>
912
{{else1}}
1013
<li class="header__menu__item">
1114
<a class="btn btn_contained btn_size_s" href="/login">로그인</a>

0 commit comments

Comments
 (0)