2023-01-20 ~ 2023-01-21
MVC 패턴 ( Client > Servlet > Service > DAO > DB ) 에 대해 이해한다.
@WebFilter(value = { "/form/*", "/form" })
public class FromFilter implements Filter {
private static final String[] whitelist = { "/form/login", "/form/logout", "/form/signup" };
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
String requestURI = httpRequest.getRequestURI();
HttpServletResponse httpResponse = (HttpServletResponse) response;
if (isLoginCheckPath(requestURI)) {
HttpSession session = httpRequest.getSession(false);
if (session == null || session.getAttribute("userInfo") == null) {
httpResponse.sendRedirect("/form/login");
return;
}
}
chain.doFilter(httpRequest, httpResponse);
return;
}
private boolean isLoginCheckPath(String requestURI) {
return !PatternMatchUtils.simpleMatch(whitelist, requestURI);
}
}
@PostMapping(value = "/login")
public Object loginPost(@RequestParam Map<String, Object> params, ModelAndView modelAndView,
HttpSession session) {
Object userInfo = formService.loginAttempt(params);
if (userInfo == null) {
modelAndView.addObject("msg", "로그인 정보가 불일치합니다.");
modelAndView.setViewName("form/login");
return modelAndView;
} else {
session.setAttribute("userInfo", userInfo);
return "redirect:/form/survey";
}
}
...
<!-- 로그인 여부에 따라 페이지명을 다르게 출력 -->
<div class="fs-1 text-center mt-5 mb-3">${userInfo == null ? 'Sign Up To Survey' : 'My Page'}</div>
<!-- 로그인 여부에 따라 input:hidden 추가 및 form action 동작 -->
<form action="/form/${userInfo == null ? 'signup' : 'mypage'}" method="post" id="userForm">
<c:if test="${userInfo != null}">
<input type="hidden" name="muid" id="muid" value="${userInfo.get("MUID")}">
</c:if>
<!-- 로그인 여부에 따라 value 작성 -->
<div class="row d-flex justify-content-center">
<div class="col-3 my-3">
<label class="form-label" for="id">ID</label>
<input class="form-control w-100" type="text" name="id" id="id" value="${userInfo.get("ID")}" required>
</div>
</div>
...
<!-- 로그인 여부에 따라 버튼명 작성 -->
<div class="row d-flex justify-content-center">
<div class="col-3 my-3">
<c:if test="${userInfo == null}">
<button class="btn btn-dark w-100" type="submit" id="insertButton">가입하기</button>
</c:if>
<c:if test="${userInfo != null}">
<button class="btn btn-dark w-100" type="submit" id="updateButton">수정하기</button>
</c:if>
</div>
</div>
</form>
<!-- 정보수정일 경우에만 탈퇴하기 버튼 노출 -->
<c:if test="${userInfo != null}">
<form action="/form/delete" method="post" id="dropForm">
<input type="hidden" name="muid" id="muid" value="${userInfo.get("MUID")}">
<div class="row d-flex justify-content-center">
<div class="col-3 my-3">
<div class="btn btn-danger w-100" id="dropButton">탈퇴하기</div>
</div>
</div>
</form>
</c:if>
...