[ JSP / HTML ] 로그인 구조 이해 (세션 활용) - 페이지에서 로그인 하기

2024. 3. 19. 19:06· FULL-STACK/└ JSP (Java Server Page)

환경 : Spring Tool Suite4

 

 

[ 로그인 및 로그아웃 기본 구조 이해 ]

참고 : https://ggingggang05.tistory.com/121


[ 로그인 및 로그아웃을 페이지에서 해보기 ]

 

   - MemberController.java

 

@Controller
@RequestMapping("/member")
public class MemberController {
	
	@Autowired
	public MemberDao memberDao;
	
	//회원가입
	@GetMapping("/join")
	public String join() {
		return "/WEB-INF/views/member/join.jsp";
	}
	
	@PostMapping("/join")
	public String join(@ModelAttribute MemberDto memberDto) {
		memberDao.insert(memberDto);
		return "redirect:joinFinish";
	}
	
	@RequestMapping("/joinFinish")
	public String joinFinish() {
		return "/WEB-INF/views/member/joinFinish.jsp";
	}
	
	//실제 로그인
	//- 아이디와 비밀번호 검사를 통과해야만 세션에 데이터를 추가한다
	//- 사용자가 입력한 아이디를 추가한다
	@GetMapping("/login")
	public String login() {
		return "/WEB-INF/views/member/login.jsp";
	}
	@PostMapping("/login")
	public String login(@ModelAttribute MemberDto inputDto, HttpSession session) {
		//사용자가 입력한 아이디로 회원정보를 조회한다
		MemberDto findDto = memberDao.selectOne(inputDto.getMemberId());
		//로그인 가능 여부를 판정
		boolean isValid = findDto != null && inputDto.getMemberPw().equals(findDto.getMemberPw());
		//결과에 따라 다른 처리
		if(isValid) {
			//세션에 데이터 추가
			session.setAttribute("loginId", findDto.getMemberId());
			
			return "redirect:/";
		} else { //로그인 실패
			return "redirect:login?error";
		}
	}
	
	//실제 로그아웃
	// - 로그인 때 검사 했으므로 추가 검사는 불필요
	// - 로그인 때 저장한 세션의 데이터만 삭제 처리
	@RequestMapping("/logout")
	public String logout(HttpSession session) {
		session.removeAttribute("loginId");
		return "redirect:/";
	}
	
}

 

 

   - header.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>나의 홈페이지</title>
	</head>
	<body>
		<div>
			<%-- 템플릿 페이지는 무조건 절대경로로 써야한다 --%>
			<a href="/">홈으로</a>
			<a href="/pocketmon/list">포켓몬스터 시스템</a>
			<a href="/emp/list">사원관리 시스템</a>
			<a href="/menu/list">메뉴관리 시스템</a>
		</div>
        
        
		<%-- 로그인 여부에 따라 달라지는 메뉴  --%>
		<div>
			<c:choose>
				<c:when test="${sessionScope.loginId != null}">
					<a href="/member/logout">로그아웃</a>
					<a href="">내정보</a>
				</c:when>
				<c:otherwise>
					<a href="/member/join">회원가입</a>
					<a href="/member/login">로그인</a>
				</c:otherwise>
			</c:choose>
		</div>
        
        <%-- 이해를 위한 정보 --%>
		<div>
			<%--
			<c:choose>
				<c:when test="${sessionScope.loginId != null}">
					<a href="/member/testLogin">테스트로그인</a>		
				</c:when>
				<c:otherwise>
					<a href="/member/testLogout">테스트로그아웃</a>		
				</c:otherwise>
			</c:choose>
			--%>
			login = ${sessionScope.loginId != null} ,
			loginId = ${sessionScope.loginId}
		</div>
		<hr>

    (+) <c:choose> 태그를 사용하여 로그인 정보가 세션에 있으면 '로그아웃', '내정보' 메뉴가 보이고, 로그인 정보가 세션에 있지 않으면 '회원가입', '로그인' 메뉴가 보이게끔 설정

    (+) <%-- 이해를 위한 정보 --%>

        세션에 어떤 정보가 있는지 이해를 하기 위해 사용하는 코드이다. (사용하지 않을 땐 주석처리 혹은 코드 제거)

 

   - login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<jsp:include page="/WEB-INF/views/template/header.jsp"></jsp:include>

<h1>로그인</h1>

<c:if test="${param.error != null }">
	<h3 style="color:red">로그인 정보가 일치하지 않습니다</h3>
</c:if>


<form action="login" method="post">
	아이디 <input name="memberId" type="text" required> <br><br>
	비밀번호 <input name="memberPw" type="password" required> <br><br>
	<button>로그인</button>
</form>

<jsp:include page="/WEB-INF/views/template/footer.jsp"></jsp:include>

 

 

   - footer.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
		</div>
		<hr>
		<div>
			<h2>페이지의 하단 영역 입니다.</h2>
		</div>
	</body>
</html>

 

 

   - 출력 결과

기본 로그인 창 / 로그인 정보를 올바르게 입력하지 않은 경우 화면

 

 

 

 

개인 공부 기록용입니다:)

728x90