-
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.
[톰캣 구현하기 3, 4단계] 토리(천은정) 미션 제출합니다. (#491)
* feat: GreetingControllerTest 변경 * refactor: HttpRequest 클래스 구현 - HttpRequest 클래스 구조 분리 및 역할 세분화 - HttpRequestLine - HttpMethod - HttpPath - HttpProtocol - HttpRequestHeaders - HttpRequestBody - HttpProtocol enum 클래스 추가 * refactor: Controller 인터페이스 추가 - HttpResponse 구조 변경 - HttpRequest 객체의 요청을 처리할 FrontController 추가 - Http11Processor 내부 HttpRequest path로 인한 분기 로직 책임 분리 * feat: 동시성 확장 * refactor: 의존 관계 분리 * fix: 로그인 문제 해결
- Loading branch information
Showing
40 changed files
with
745 additions
and
295 deletions.
There are no files selected for viewing
8 changes: 8 additions & 0 deletions
8
study/src/main/java/cache/com/example/cachecontrol/CacheWebConfig.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,13 +1,21 @@ | ||
package cache.com.example.cachecontrol; | ||
|
||
import org.springframework.context.annotation.Configuration; | ||
import org.springframework.http.CacheControl; | ||
import org.springframework.web.servlet.config.annotation.InterceptorRegistry; | ||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; | ||
import org.springframework.web.servlet.mvc.WebContentInterceptor; | ||
|
||
@Configuration | ||
public class CacheWebConfig implements WebMvcConfigurer { | ||
|
||
@Override | ||
public void addInterceptors(final InterceptorRegistry registry) { | ||
final WebContentInterceptor webContentInterceptor = new WebContentInterceptor(); | ||
final CacheControl cacheControl = CacheControl | ||
.noCache() | ||
.cachePrivate(); | ||
webContentInterceptor.addCacheMapping(cacheControl, "/**"); | ||
registry.addInterceptor(webContentInterceptor); | ||
} | ||
} |
17 changes: 12 additions & 5 deletions
17
study/src/main/java/cache/com/example/etag/EtagFilterConfiguration.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,12 +1,19 @@ | ||
package cache.com.example.etag; | ||
|
||
import org.springframework.boot.web.servlet.FilterRegistrationBean; | ||
import org.springframework.context.annotation.Bean; | ||
import org.springframework.context.annotation.Configuration; | ||
import org.springframework.web.filter.ShallowEtagHeaderFilter; | ||
|
||
import static cache.com.example.version.CacheBustingWebConfig.PREFIX_STATIC_RESOURCES; | ||
|
||
@Configuration | ||
public class EtagFilterConfiguration { | ||
|
||
// @Bean | ||
// public FilterRegistrationBean<ShallowEtagHeaderFilter> shallowEtagHeaderFilter() { | ||
// return null; | ||
// } | ||
@Bean | ||
public FilterRegistrationBean<ShallowEtagHeaderFilter> shallowEtagHeaderFilter() { | ||
FilterRegistrationBean<ShallowEtagHeaderFilter> filterFilterRegistrationBean | ||
= new FilterRegistrationBean<>(new ShallowEtagHeaderFilter()); | ||
filterFilterRegistrationBean.addUrlPatterns("/etag", PREFIX_STATIC_RESOURCES + "/*"); | ||
return filterFilterRegistrationBean; | ||
} | ||
} |
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
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 |
---|---|---|
@@ -1,11 +1,17 @@ | ||
package nextstep; | ||
|
||
import nextstep.jwp.controller.HomeController; | ||
import nextstep.jwp.controller.LoginController; | ||
import nextstep.jwp.controller.RegisterController; | ||
import org.apache.catalina.startup.Tomcat; | ||
|
||
public class Application { | ||
|
||
public static void main(String[] args) { | ||
final var tomcat = new Tomcat(); | ||
tomcat.addController("/", new HomeController()); | ||
tomcat.addController("/login", new LoginController()); | ||
tomcat.addController("/register", new RegisterController()); | ||
tomcat.start(); | ||
} | ||
} |
17 changes: 17 additions & 0 deletions
17
tomcat/src/main/java/nextstep/jwp/controller/HomeController.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,17 @@ | ||
package nextstep.jwp.controller; | ||
|
||
import org.apache.coyote.http11.controller.AbstractController; | ||
import org.apache.coyote.http11.request.HttpRequest; | ||
import org.apache.coyote.http11.response.HttpResponse; | ||
|
||
public class HomeController extends AbstractController { | ||
@Override | ||
protected void doPost(final HttpRequest request, final HttpResponse response) throws Exception { | ||
throw new UnsupportedOperationException(); | ||
} | ||
|
||
@Override | ||
protected void doGet(final HttpRequest request, final HttpResponse response) throws Exception { | ||
response.home("Hello world!"); | ||
} | ||
} |
57 changes: 57 additions & 0 deletions
57
tomcat/src/main/java/nextstep/jwp/controller/LoginController.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,57 @@ | ||
package nextstep.jwp.controller; | ||
|
||
import nextstep.jwp.db.InMemoryUserRepository; | ||
import nextstep.jwp.model.User; | ||
import org.apache.coyote.http11.common.HttpUri; | ||
import org.apache.coyote.http11.controller.AbstractController; | ||
import org.apache.coyote.http11.cookie.HttpCookie; | ||
import org.apache.coyote.http11.request.HttpRequest; | ||
import org.apache.coyote.http11.response.HttpResponse; | ||
import org.apache.coyote.http11.session.HttpSession; | ||
import org.apache.coyote.http11.session.SessionManager; | ||
|
||
import java.util.Map; | ||
import java.util.Objects; | ||
|
||
public class LoginController extends AbstractController { | ||
private static final SessionManager sessionManager = SessionManager.create(); | ||
private static final String USER = "user"; | ||
private static final String PASSWORD = "password"; | ||
|
||
@Override | ||
protected void doPost(final HttpRequest request, final HttpResponse response) throws Exception { | ||
final Map<String, String> loginData = request.getBody(); | ||
final User user = InMemoryUserRepository.findByAccount(loginData.get("account")) | ||
.orElse(null); | ||
if (!Objects.isNull(user) && user.checkPassword(loginData.get(PASSWORD))) { | ||
final HttpCookie newCookie = HttpCookie.create(); | ||
saveSession(newCookie, user); | ||
response.found(HttpUri.INDEX_HTML.getUri()); | ||
response.setCookie(newCookie.getJSESSIONID()); | ||
return; | ||
} | ||
response.ok(HttpUri.UNAUTHORIZED_HTML.getUri()); | ||
} | ||
|
||
@Override | ||
protected void doGet(final HttpRequest request, final HttpResponse response) { | ||
final HttpCookie cookie = makeHttpCookie(request); | ||
if (cookie.hasJSESSIONID()) { | ||
final String jsessionid = cookie.getJSESSIONID(); | ||
final HttpSession httpSession = sessionManager.findSession(jsessionid); | ||
if (Objects.isNull(httpSession)) { | ||
response.ok(HttpUri.LOGIN_HTML.getUri()); | ||
return; | ||
} | ||
response.found(HttpUri.INDEX_HTML.getUri()); | ||
return; | ||
} | ||
response.ok(HttpUri.LOGIN_HTML.getUri()); | ||
} | ||
|
||
private void saveSession(final HttpCookie newCookie, final User user) { | ||
final HttpSession httpSession = new HttpSession(newCookie.getJSESSIONID()); | ||
httpSession.setAttribute(USER, user); | ||
sessionManager.add(httpSession); | ||
} | ||
} |
24 changes: 24 additions & 0 deletions
24
tomcat/src/main/java/nextstep/jwp/controller/RegisterController.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,24 @@ | ||
package nextstep.jwp.controller; | ||
|
||
import nextstep.jwp.db.InMemoryUserRepository; | ||
import nextstep.jwp.model.User; | ||
import org.apache.coyote.http11.common.HttpUri; | ||
import org.apache.coyote.http11.controller.AbstractController; | ||
import org.apache.coyote.http11.request.HttpRequest; | ||
import org.apache.coyote.http11.response.HttpResponse; | ||
|
||
import java.util.Map; | ||
|
||
public class RegisterController extends AbstractController { | ||
@Override | ||
protected void doPost(final HttpRequest request, final HttpResponse response) throws Exception { | ||
final Map<String, String> registerData = request.getBody(); | ||
InMemoryUserRepository.save(new User(registerData.get("account"), registerData.get("password"), registerData.get("email"))); | ||
response.ok(HttpUri.INDEX_HTML.getUri()); | ||
} | ||
|
||
@Override | ||
protected void doGet(final HttpRequest request, final HttpResponse response) throws Exception { | ||
response.ok(HttpUri.REGISTER.getUri()); | ||
} | ||
} |
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.