Skip to content

Commit 207f901

Browse files
authored
Merge pull request #52 from codingbaraGo/feat/web/dynamic-view#23
[Web-view] 동적 뷰 개발
2 parents a966b52 + e4ec9a7 commit 207f901

27 files changed

Lines changed: 676 additions & 173 deletions
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package app.handler;
2+
3+
import http.HttpMethod;
4+
import http.HttpStatus;
5+
import http.request.HttpRequest;
6+
import web.handler.SingleArgHandler;
7+
import web.response.DynamicViewResponse;
8+
import web.response.HandlerResponse;
9+
10+
public class HomeHandler extends SingleArgHandler<HttpRequest> {
11+
12+
public HomeHandler() {
13+
super(HttpMethod.GET, "/");
14+
}
15+
16+
@Override
17+
public HandlerResponse handle(HttpRequest request) {
18+
return DynamicViewResponse.of(HttpStatus.OK, "/index.html");
19+
}
20+
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ public HandlerResponse handle(QueryParameters params) {
3939

4040
SessionEntity session = sessionManager.create(
4141
user.getUserId(),
42-
user.getUserRole());
42+
user.getUserRole(),
43+
user.getNickname());
4344

4445
RedirectResponse res = RedirectResponse.to("/");
4546
res.setCookie(

src/main/java/config/AppConfig.java

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

3+
import app.handler.HomeHandler;
34
import app.handler.LoginWithPost;
45
import app.handler.RegisterWithGet;
56
import app.handler.RegisterWithPost;
@@ -22,10 +23,14 @@
2223
import web.filter.*;
2324
import web.handler.StaticContentHandler;
2425
import web.handler.WebHandler;
26+
import web.renderer.DynamicViewRenderer;
2527
import web.renderer.HttpResponseRenderer;
2628
import web.renderer.RedirectRenderer;
2729
import web.renderer.StaticViewRenderer;
30+
import web.renderer.view.ExpressionResolver;
2831
import web.session.SessionStorage;
32+
import web.renderer.view.TemplateEngine;
33+
import web.renderer.view.TemplateLoader;
2934

3035
import java.util.List;
3136

@@ -84,8 +89,8 @@ public List<WebHandler> webHandlerList() {
8489
staticContentHandler(),
8590
registerWithGet(),
8691
registerWithPost(),
87-
loginWithPost()
88-
)
92+
loginWithPost(),
93+
homeHandler())
8994
);
9095
}
9196

@@ -115,13 +120,18 @@ public LoginWithPost loginWithPost() {
115120
() -> new LoginWithPost(sessionStorage()));
116121
}
117122

123+
public HomeHandler homeHandler(){
124+
return getOrCreate("homeHandler", HomeHandler::new);
125+
}
126+
118127
// ===== Renderer =====
119128
public List<HttpResponseRenderer> httpResponseRendererList() {
120129
return getOrCreate(
121130
"httpResponseRendererList",
122131
() -> List.of(
123132
staticViewRenderer(),
124-
redirectRenderer()
133+
redirectRenderer(),
134+
dynamicViewRenderer()
125135
)
126136
);
127137
}
@@ -137,6 +147,24 @@ public RedirectRenderer redirectRenderer() {
137147
return getOrCreate("redirectRenderer", RedirectRenderer::new);
138148
}
139149

150+
public DynamicViewRenderer dynamicViewRenderer() {
151+
return getOrCreate("dynamicViewRenderer",
152+
() -> new DynamicViewRenderer(templateEngine()));
153+
}
154+
155+
// ===== ViewEngine =====
156+
public TemplateEngine templateEngine() {
157+
return getOrCreate("templateEngine",
158+
() -> new TemplateEngine(templateLoader(), expressionResolver()));
159+
}
160+
161+
public ExpressionResolver expressionResolver(){
162+
return getOrCreate("expressResolver", ExpressionResolver::new);
163+
}
164+
165+
public TemplateLoader templateLoader() {
166+
return getOrCreate("templateLoader", TemplateLoader::new);
167+
}
140168

141169
// ===== Adapter =====
142170
public List<HandlerAdapter> handlerAdapterList() {
@@ -164,7 +192,6 @@ public DefaultHandlerAdapter defaultHandlerAdapter() {
164192
DefaultHandlerAdapter::new
165193
);
166194
}
167-
168195
// ===== Resolver =====
169196
public List<ArgumentResolver<?>> argumentResolverList() {
170197
return getOrCreate(

src/main/java/config/SecurityConfig.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import exception.ErrorException;
44

5+
import java.util.List;
6+
57
public class SecurityConfig extends SingletonContainer {
68
private final AppConfig appConfig = new AppConfig();
79
private int callCount;
@@ -15,9 +17,9 @@ public void config(){
1517
public void setPaths(){
1618
appConfig.filterChainContainer()
1719
.addPath(FilterType.AUTHENTICATED, "/mypage/**")
18-
.addPath(FilterType.LOG_IN, "/user/login")
19-
.addPath(FilterType.ALL, "/user/**")
20-
.addPath(FilterType.PUBLIC, "/**");
20+
.addPaths(FilterType.LOG_IN, List.of("/user/login", "/login"))
21+
.addPaths(FilterType.PUBLIC, List.of("/", "/home/*"))
22+
.addPath(FilterType.ALL, "/**");
2123
}
2224

2325

src/main/java/config/VariableConfig.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ public class VariableConfig {
66
public static final List<String> STATIC_RESOURCE_ROOTS = List.of(
77
"./src/main/resources",
88
"./src/main/resources/static");
9+
public static final List<String> DYNAMIC_RESOURCE_ROOTS = List.of(
10+
"./src/main/resources/templates"
11+
);
912

1013
public static final long IDLE_MS = 30*60*100;
1114
public static final long ABSOLUTE_MS = 180*60*100;

src/main/java/exception/handler/ErrorExceptionHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
import java.time.format.DateTimeFormatter;
1616

1717
public class ErrorExceptionHandler implements ExceptionHandler {
18-
private final Logger logger = LoggerFactory.getLogger(ErrorException.class);
18+
private final Logger logger = LoggerFactory.getLogger(ErrorExceptionHandler.class);
1919
@Override
2020
public boolean support(Throwable e) {
2121
return e instanceof ErrorException;

src/main/java/web/dispatch/Dispatcher.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public HttpResponse handle(HttpRequest request, HttpResponse response){
4141
HandlerAdapter adapter = adapterList.stream().filter(ha -> ha.support(handler))
4242
.findFirst().orElseThrow(() -> new ErrorException("DispatcherError: No adapter matched"));
4343

44-
HandlerResponse handlerResponse = adapter.handle(request, handler);
44+
HandlerResponse handlerResponse = adapter.handle(request, handler).postHandling(request, response);
4545

4646
HttpResponseRenderer responseHandler = responseHandlerList.stream()
4747
.filter(rh -> rh.supports(handlerResponse))

src/main/java/web/filter/AccessLogFilter.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public class AccessLogFilter implements ServletFilter {
1212

1313
@Override
1414
public void runFilter(HttpRequest request, HttpResponse response, FilterChainContainer.FilterChainEngine chain) {
15+
request.getOrGenerateRid();
1516
chain.doFilter();
1617
if(request.getAuthenticationInfo()!=null &&
1718
request.getAuthenticationInfo().getRole().equals(UserRole.MEMBER)) {

src/main/java/web/filter/AuthenticationFilter.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import http.HttpStatus;
44
import http.request.HttpRequest;
55
import http.response.HttpResponse;
6+
import web.filter.authentication.AuthenticationInfo;
67
import web.filter.authentication.UnanimousAuthentication;
78
import web.filter.authentication.UserAuthentication;
89
import web.filter.authentication.UserRole;
@@ -20,17 +21,17 @@ public AuthenticationFilter(SessionStorage sessionManager) {
2021
public void runFilter(HttpRequest request, HttpResponse response, FilterChainContainer.FilterChainEngine chain) {
2122
String sid = request.getCookieValue("SID").orElse(null);
2223
SessionEntity session = sessionManager.getValid(sid);
24+
AuthenticationInfo authInfo;
2325

2426
if (session == null) {
25-
request.setAuthenticationInfo(
26-
UnanimousAuthentication.of());
27+
authInfo = UnanimousAuthentication.of();
2728
} else{
28-
request.setAuthenticationInfo(
29-
UserAuthentication.of(
30-
session.getUserId(),
31-
UserRole.valueOf(session.getUserRole())));
29+
authInfo = UserAuthentication.of(
30+
session.getUserId(),
31+
UserRole.valueOf(session.getUserRole()));
32+
authInfo.addAttribute("nickname",session.getNickname());
3233
}
33-
34+
request.setAuthenticationInfo(authInfo);
3435
chain.doFilter();
3536
}
3637
}

src/main/java/web/filter/authentication/AuthenticationInfo.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,7 @@
44

55
public interface AuthenticationInfo {
66
Optional<Long> getUserId();
7+
Optional<Object> getAttribute(String key);
8+
void addAttribute(String key, Object value);
79
UserRole getRole();
810
}

0 commit comments

Comments
 (0)