실습(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> | </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">© 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 |