티스토리 뷰
https://github.com/LSH3333/spring5fs
GitHub - LSH3333/spring5fs: 스프링5 프로그래밍 입문 (최범균 저)
스프링5 프로그래밍 입문 (최범균 저) . Contribute to LSH3333/spring5fs development by creating an account on GitHub.
github.com
마지막으로 url 주소에 따라 해당 페이지가 어떤 과정을 거쳐 보이게 되는지 정리해볼까 한다.
메인
http://localhost:8080/sp5-chap17/main
/main 경로는 컨트롤러 클래스에의해 처리되지 않고, MvcConfig.java 클래스에 addViewControllers() 메소드에 의해 처리된다. 해당 메서드는 WebMvcConfigurer에 정의되어 있는 메서드다.
// WebMvcConfigurer 인터페이스에 정의됨
// 요청 경로 - 뷰 이름 연결
@Override
public void addViewControllers(ViewControllerRegistry registry)
{
registry.addViewController("/main").setViewName("main");
}
main.jsp는 다음과 같은데
<%@ page contentType="text/html; charset=utf-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<title>메인</title>
</head>
<body>
<%-- 로그인 성공했다면 HttpSession에 authInfo 객체 저장되어 있을것 --%>
<%-- login 정보없음 --%>
<c:if test="${empty authInfo }" >
<p>환영합니다</p>
<p>
<a href="<c:url value="/register/step1" />">[회원 가입하기]</a>
<a href="<c:url value="/login" />">[로그인]</a>
</p>
</c:if>
<%-- login 정보있음 --%>
<c:if test="${!empty authInfo }" >
<p>${authInfo.name}님, 환영합니다. </p>
<p>
<a href="<c:url value="/edit/changePassword"/>">[비밀번호 변경]</a>
<a href="<c:url value="/logout"/>">[로그아웃]</a>
</p>
</c:if>
</body>
</html>
현재 로그인 안한 상태이므로, authInfo가 없어 [회원 가입하기]와 [로그인]이 보여진다.
로그인
[로그인]을 눌르면 로그인 페이지로 넘어가고 해당 주소 요청은 LoginController 클래스의 @GetMapping을 갖는 form() 메서드가 처리하고 뷰이름으로 login/loginForm.jsp를 리턴한다.
http://localhost:8080/sp5-chap17/login
loginForm.jsp
<%@ page contentType="text/html; charset=EUC-KR" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<!DOCTYPE html>
<html>
<head>
<title><spring:message code="login.title" /></title>
</head>
<body>
<form:form modelAttribute="loginCommand">
<form:errors />
<p>
<label><spring:message code="email" />:<br>
<form:input path="email" />
<form:errors path="email" />
</label>
</p>
<p>
<label><spring:message code="password" />:<br>
<form:input path="password" />
<form:errors path="password" />
</label>
</p>
<p>
<label><spring:message code="rememberEmail" />:<br>
<form:checkbox path="rememberEmail" />
</label>
</p>
<input type="submit" value="<spring:message code="login.btn" />" />
</form:form>
</body>
</html>
이메일 비밀번호를 입력해 로그인하기 버튼을 누르면 LoginController 클래스의 @PostMapping을 갖는 submit() 메서드의 커맨드 객체 loginCommand에 정보들이 담기고 정보에 따라 로그인 실패하면 뷰이름으로 login/loginForm을 리턴해 다시 로그인 페이지를 보여주고 성공했다면 뷰 이름으로 login/loginSuccess를 리턴해 보여준다.
이메일과 비밀번호가 형식에 맞는지 확인은 LoginCommandValidator가 수행한다.
이메일과 비밀번호를 DB의 데이터와 비교는 AuthService.authenticate() 메서드로 수행하고 수행과정에서 exception이 발생하면 로그인이 실패하게 된다.
로그인 성공 판단시 커맨드 객체 LoginCommand에 rememberEmail 불린 값이 true라면 rememberCookie.setMaxAge()로 쿠키를 이용해 이메일을 30일 유지한다.
또한 HttpSession.setAttribute() 메서드에 이름 "authInfo" 값 authInfo 객체를 저장해 세션을 유지한다.
로그인 성공시 뷰이름 login/loginSuccess를 리턴해 로그인 성공을 보여주고
이 상태에서 메인으로 이동하면
위와 같이 유저명, 환영합니다 가 보여지게 되는데, 이는 로그인 성공시 HttpSession.setAttribute()로 세션을 저장했기 떄문이다.
main.jsp 에서 authInfo가 존재하기 때문에 이렇게 보여지게 된다.
비밀번호 변경
[비밀번호 변경]을 누르면 "http://localhost:8080/sp5-chap17/edit/changePassword" 주소를 요청하게되고 이는 ChangePasswordController 클래스가 처리한다.
@GetMapping에 의해 리턴되는 뷰 이름은 "edit/changePwdForm"다.
edit/changePwdForm.jsp
<%@ page contentType="text/html; charset=utf-8" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<!DOCTYPE html>
<html>
<head>
<title><spring:message code="change.pwd.title" /></title>
</head>
<body>
<form:form>
<p>
<label><spring:message code="currentPassword" />:<br>
<form:input path="currentPassword" />
<form:errors path="currentPassword" />
</label>
</p>
<p>
<label><spring:message code="newPassword" />:<br>
<form:input path="newPassword" />
<form:errors path="newPassword" />
</label>
</p>
<input type="submit" value="<spring:message code="change.btn" />" >
</form:form>
</body>
</html>
현재 비밀번호와 새 비밀번호를 입력해 [변경하기] 버튼을 누르면 ChangePwdController 클래스의 @PostMapping을 갖는 submit() 메서드에 의해 처리된다.
입력한 값은 커맨드 객체인 ChangePwdCommand에 담겨있고 발생하는 에러가 없다면 현재 세션에 저장된 정보를 바탕으로 비밀번호를 변경하고 뷰 이름으로 "edit/changePwd"를 리턴한다.
로그아웃 상태에서 메인에서 [회원 가입하기]를 누르면 회원 가입 페이지로 이동한다.
회원 가입
http://localhost:8080/sp5-chap17/register/step1
약관동의를 체크하고 [다음단계]를 누르면 step2로 이동된다.
http://localhost:8080/sp5-chap17/register/step2
step2.jsp
<%-- 입력 폼 --%>
<%@ page contentType="text/html; charset=utf-8" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<!DOCTYPE html>
<html>
<head>
<title><spring:message code="member.register"/></title>
</head>
<body>
<h2><spring:message code="member.info"/></h2>
<form:form action="step3" modelAttribute="registerRequest">
<p>
<label><spring:message code="email"/>:<br>
<form:input path="email" />
<form:errors path="email" />
</label>
</p>
<p>
<label><spring:message code="name"/>:<br>
<form:input path="name" />
<form:errors path="name" />
</label>
</p>
<p>
<label><spring:message code="password"/>:<br>
<form:password path="password" />
<form:errors path="password" />
</label>
</p>
<p>
<label><spring:message code="password.confirm"/>:<br>
<form:password path="confirmPassword" />
<form:errors path="confirmPassword" />
</label>
</p>
<input type="submit" value="<spring:message code="register.btn"/>">
</form:form>
</body>
</html>
회원정보들을 입력후 [가입완료]를 누르면 요청은 <form:form> 태그의 속성 action="step3"로 인해 RegisterController 클래스의 @PostMapping("register/step3")를 갖는 handleStep3()로 전달되고 처리된다.
'Web' 카테고리의 다른 글
Filter (0) | 2023.02.09 |
---|---|
JPA 정리 (0) | 2022.12.26 |
Ch17. 프로퍼티 파일 (0) | 2022.07.28 |
Ch17. 프로필 (0) | 2022.07.28 |
Ch16. JSON 응답과 요청 처리, 응답을 JSON으로 변환 (0) | 2022.07.26 |
- Total
- Today
- Yesterday
- Brute Force
- C
- floyd warshall
- CSS
- BFS
- Python
- back tracking
- Dijkstra
- Stack
- Implementation
- db
- dfs
- Unity
- recursion
- priority queue
- binary search
- Kruskal
- Tree
- DP
- 재귀
- greedy
- 조합
- 자료구조
- 이분탐색
- two pointer
- graph
- C++
- MVC
- permutation
- Spring
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |