본문 바로가기

웹 개발/JSP

[Web_JSP] 17

실습(MVC(자동로그인))

- [Web_JSP] 16 이어서

 

 

1. MemberDAO.java

package com.board.app.domain.dao;

import java.util.HashMap;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import com.board.app.domain.vo.MemberVO;
import com.mybatis.config.MyBatisConfig;
 
public class MemberDAO {
	SqlSessionFactory sqlSessionFactory = MyBatisConfig.getSqlSessionFactory();
	SqlSession sqlSession;
	
	public MemberDAO() {
		sqlSession = sqlSessionFactory.openSession(true);
	}
	
	//아이디 중복검사
	public boolean checkId(String memberId) {
		return (Integer)sqlSession.selectOne("Member.checkId", memberId) == 1;
	}
	
	//회원가입
	public void insert(MemberVO memberVO) {
		sqlSession.insert("Member.insert", memberVO);
	}
	
	//로그인
	public int login(HashMap<String, String> loginMap) {
		return sqlSession.selectOne("Member.login", loginMap);
	}
}

 

 

 

2. MemberMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http//mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="Member">
	<select id="checkId" parameterType="string" resultType="_int">
		select count(member_number) from tbl_member where member_id = #{memberId}
	</select>	
	
	<insert id="insert" parameterType="memberVO">
		insert into tbl_member
		(member_id, member_pw, member_name, member_age, member_gender, member_email, member_zipcode, member_address, member_address_detail)
		values(#{memberId}, #{memberPw}, #{memberName}, #{memberAge}, #{memberGender}, #{memberEmail}, #{memberZipcode}, #{memberAddress}, #{memberAddressDetail});
	</insert>
	 
	<select id="login" parameterType="map" resultType="_int">
		select member_number from tbl_member where member_id = #{memberId} and member_pw = #{memberPw}
	</select>
</mapper>

 

 

 

3. MemberLoginOk.java

package com.board.app.member;

import java.io.IOException;
import java.util.HashMap;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.board.app.action.Action;
import com.board.app.action.ActionInfo;
import com.board.app.domain.dao.MemberDAO;

public class MemberLoginOk implements Action{ 
	@Override
	public ActionInfo execute(HttpServletRequest req, HttpServletResponse resp) throws IOException {
		req.setCharacterEncoding("UTF-8");
		
		ActionInfo actionInfo = new ActionInfo();
		
		String memberId = req.getParameter("memberId");
		String memberPw = req.getParameter("memberPw");
		String saveId = req.getParameter("saveId");
		String autoLogin = req.getParameter("autoLogin");
		int memberNumber = 0;
		
		MemberDAO memberDAO = new MemberDAO();
		
		HashMap<String, String> loginMap = new HashMap<>();
		
		loginMap.put("memberId", memberId);
		loginMap.put("memberPw", memberPw);
		
		memberNumber = memberDAO.login(loginMap);
		
		//로그인 성공 시
		if(memberNumber != 0) {
			//세션에 회원번호를 저장한다.
			req.getSession().setAttribute("memberNumber", memberNumber);
			
			//쿠키 생성
			//아이디 저장이 체크되었다면
			if(saveId != null) {
				//쿠키에 아이디와 체크박스 saveId 저장
				Cookie cookieId = new Cookie("memberId", memberId);
				Cookie cookieSaveId = new Cookie("saveId", "saveId");
				
				//유통 기한을 1년으로 설정
				cookieId.setMaxAge(60*60*24*365);
				cookieSaveId.setMaxAge(60*60*24*365);
				
				//응답 객체에 생성한 쿠키를 넣어준다.
				resp.addCookie(cookieId);
				resp.addCookie(cookieSaveId);
				
			}else {
				//아이디 저장이 체크되지 않았을 경우
				if(req.getHeader("Cookie") != null) {
					//쿠키를 삭제해준다.
					Cookie[] cookies =req.getCookies();
					for(Cookie cookie : cookies) {
						cookie.setMaxAge(0);
						resp.addCookie(cookie);
					}
				}
			}
			
			//자동 로그인 체크 시
			if(autoLogin != null) {
				//아이디, 비밀번호, 자동로그인 체크박스를 쿠키에 저장
				Cookie cookieId = new Cookie("memberId", memberId);
				Cookie cookiePw = new Cookie("memberPw", memberPw);
				Cookie cookieAutoLogin = new Cookie("autoLogin", "autoLogin");
				
				cookieId.setMaxAge(60*60*24*365);
				cookiePw.setMaxAge(60*60*24*365);
				cookieAutoLogin.setMaxAge(60*60*24*365);
				
				resp.addCookie(cookieId);
				resp.addCookie(cookiePw);
				resp.addCookie(cookieAutoLogin);
				
			}else {
				//자동 로그인 해제 시 기존 쿠키 삭제
				if(req.getHeader("Cookie") != null) {
					Cookie[] cookies =req.getCookies();
					for(Cookie cookie : cookies) {
						cookie.setMaxAge(0);
						resp.addCookie(cookie);
					}
				}
			}
			
			actionInfo.setPath("/board/BoardListOk.bo");
			
		}else {
			actionInfo.setPath("/member/MemberLogin.me");
		}
		actionInfo.setRedirect(false);
		
		return actionInfo;
	}
}

 

 

 

4. MemberLogin.java

package com.board.app.member;

import java.io.IOException;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.board.app.action.Action;
import com.board.app.action.ActionInfo;
 
public class MemberLogin implements Action {

	@Override
	public ActionInfo execute(HttpServletRequest req, HttpServletResponse resp) throws IOException {
		
		ActionInfo actionInfo = new ActionInfo();
		
		//쿠키 검사
		String memberId = null;
		String memberPw = null;
		String saveId = null;
		String autoLogin = null;
		
		String cookieCheck = req.getHeader("Cookie");
		
		
		if(cookieCheck != null) {
			Cookie[] cookies = req.getCookies();
			for(Cookie cookie : cookies) {
				if(cookie.getName().equals("memberId")) {
					memberId = cookie.getValue();
					
				} else if(cookie.getName().equals("memberPw")) {
					memberPw = cookie.getValue();
					
				} else if(cookie.getName().equals("saveId")) {
					saveId = cookie.getValue();
					
				}else if(cookie.getName().equals("autoLogin")) {
					autoLogin = cookie.getValue();
					
				}
			}
		}
		
		req.setAttribute("memberId", memberId);
		req.setAttribute("memberPw", memberPw);
		req.setAttribute("saveId", saveId);
		req.setAttribute("autoLogin", autoLogin);
		
		System.out.println(memberId);
		System.out.println(memberPw);
		System.out.println(saveId);
		System.out.println(autoLogin);
		
		actionInfo.setPath("/app/member/login.jsp");
		actionInfo.setRedirect(false);
		
		return actionInfo;
	}

}

 

 

 

5. login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML>
<!--
	Altitude by Pixelarity
	pixelarity.com | hello@pixelarity.com
	License: pixelarity.com/license
--> 
<html>
	<head>
		<title>로그인</title>
		<meta charset="utf-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
		<link rel="stylesheet" href="${pageContext.request.contextPath}/assets/css/main.css" />
		<style>
			input[type='button'], input[type='submit']{border-radius:0;}
			textarea{resize:none;}
			label{margin-top:3%;}
			div.preview{overflow:hidden;}
			div.preview img{width:90%; object-fit:cover; margin-left:10%;}
		</style>
	</head>
	<body class="is-preload">
		<!-- Page Wrapper -->
			<div id="page-wrapper">

				<!-- Wrapper -->
					<div class="wrapper">
						<div class="inner">
							<jsp:include page="/app/fix/header.jsp"/>
						</div>
					</div>

				<!-- Wrapper -->
					<div class="wrapper">
						<div class="inner">

							<!-- Main -->
							<section class="main">

								<header class="major">
									<a href="#" class="image main"><img src="${pageContext.request.contextPath}/images/login01.png" alt="" /></a>
									<h1>로그인</h1>
								</header>
								<hr />
								<form method="post" action="${pageContext.request.contextPath }/member/MemberLoginOk.me" name="loginForm">
									<div style="display:flex; justify-content:space-evenly;">
										<div style="width:40%">
												<div>
													<div class="col-6 col-12-xsmall" style="width:100%">
														<p style="margin:0;">아이디 </p>
														<input type="text" name="memberId" id="memberId"/>
														<br>
														<p style="margin:0;">비밀번호</p>
														<input type="password" name="memberPw" id="memberPw"/>
														<div class="col-6 col-12-xsmall" style="display:flex;">
															<div class="col-12">
																<input type="checkbox" id="saveId" name="saveId" value="saveId">
																<label for="saveId">아이디 저장</label>
															</div>
															<div>
																<input type="checkbox" id="autoLogin" name="autoLogin" value="autoLogin">
																<label for="autoLogin">자동 로그인</label>
															</div>
														</div>
														<div style="text-align:center; margin-top:9%">
															<a href="#">아이디 찾기</a><span>&nbsp;|&nbsp;</span><a href="#">비밀번호 찾기</a>
														</div>
													</div>
												</div>
												<div class="col-12">
													<ul class="actions" style="display:block; text-align:center; margin-top:9%">
														<li><input type="button" value="로그인" class="primary" style="width:100%; font-size:1em;" onclick="send()"/></li>
														<li><input type="button" value="회원가입" style="width:100%; font-size:1em;" onclick="location.href='${pageContext.request.contextPath}/member/MemberJoin.me'" /></li>
													</ul>
												</div>
											</div>
											<div class="preview" style="width:40%">
												<img src="${pageContext.request.contextPath}/images/login02.png">
											</div>
										</div>
									</form>
							</section>
						</div>
					</div>
				<!-- Wrapper -->
					<div class="wrapper">
						<div class="inner">

							<!-- Footer -->
								<footer id="footer">
									<section class="links">
										<div>
											<h3>Magna</h3>
											<ul class="plain">
												<li><a href="#">Aliquam tempus</a></li>
												<li><a href="#">Ultrecies nul</a></li>
												<li><a href="#">Gravida ultricies</a></li>
												<li><a href="#">Commodo etiam</a></li>
												</ul>
										</div>
										<div>
											<h3>Feugiat</h3>
											<ul class="plain">
												<li><a href="#">Morbi sem lorem</a></li>
												<li><a href="#">Praes sed dapi</a></li>
												<li><a href="#">Sed adipis nullam</a></li>
												<li><a href="#">Fus dolor lacinia</a></li>
											</ul>
										</div>
										<div>
											<h3>Tempus</h3>
											<ul class="plain">
												<li><a href="#">Donecnec etiam</a></li>
												<li><a href="#">Aapibus sedun</a></li>
												<li><a href="#">Namnulla tempus</a></li>
												<li><a href="#">Morbi set amet</a></li>
											</ul>
										</div>
										<div>
											<h3>Aliquam</h3>
											<ul class="plain">
												<li><a href="#">Lorem prasent dia</a></li>
												<li><a href="#">Nellentes ipsum</a></li>
												<li><a href="#">Diamsed arcu dolor</a></li>
												<li><a href="#">Sit amet cursus</a></li>
											</ul>
										</div>
									</section>
									<ul class="contact-icons">
										<li class="icon solid fa-home">1234 Fictional Street #5432 Nashville, TN 00000-0000</li>
										<li class="icon solid fa-phone"><a href="#">(000) 000-0000</a></li>
										<li class="icon solid fa-envelope"><a href="#">info@untitled.tld</a></li>
									</ul>
									<p class="copyright">&copy; Untitled. All rights reserved.</p>
								</footer>
						</div>
					</div>
			</div>
	</body>
	<!-- Scripts -->
	<script src="${pageContext.request.contextPath}/assets/js/jquery.min.js"></script>
	<script src="${pageContext.request.contextPath}/assets/js/browser.min.js"></script>
	<script src="${pageContext.request.contextPath}/assets/js/breakpoints.min.js"></script>
	<script src="${pageContext.request.contextPath}/assets/js/util.js"></script>
	<script src="${pageContext.request.contextPath}/assets/js/main.js"></script>
	<script src="${pageContext.request.contextPath}/assets/js/login.js"></script>
	<script>
		let memberId = "${memberId}";
		let memberPw = "${memberPw}";
		let saveId = "${saveId}";
		let autoLogin = "${autoLogin}";
		
		//아이디 저장버튼이 이전에 눌러져 있었다면
		if(saveId){
			//다시 체크해주고
			$("input#saveId").prop("checked", true);
			//아이디를 저장했던 아이디로 작성해준다.
			$("input[name='memberId']").val(memberId);
		}
		
		//자동 로그인이 이전에 눌러져 있었다면
		if(autoLogin){
			//다시 체크해주고
			$("input#autoLogin").prop("checked", true);
			//아이디 입력
			$("input[name='memberId']").val(memberId);
			//비밀번호 입력
			$("input[name='memberPw']").val(memberPw);
			//전송
			loginForm.submit();
		}
	</script>
</html>

 

 

 

 

'웹 개발 > JSP' 카테고리의 다른 글

[Web_JSP] 19  (0) 2022.06.07
[Web_JSP] 18  (0) 2022.06.06
[Web_JSP] 16  (0) 2022.06.04
[Web_JSP] 15  (0) 2022.06.03
[Web_JSP] 14  (0) 2022.06.02