Spring 게시판 기초-3 로그인, 회원가입

2022. 2. 14. 16:51Spring/Spring 미니 프로젝트

먼저 회원가입과 로그인을 위해서 MemberVO를 만들자.  

(원래 UserVO를 만들어서 했지만 간단버전에서는 MemberVO를 그냥 session에 setAttribute하자.)

com.study.member.vo에 MemberVO를 만들자.

MemberVO.java

package com.study.member.vo;

public class MemberVO {

	private String memId;         /* 회원 아이디 */
	private String memPass;       /* 회원 비밀번호 */
	private String memName;       /* 회원 이름 */
	private String memBir;        /* 회원 생일 */
	private String memZip;        /* 우편번호 */
	private String memAdd1;       /* 주소 */
	private String memAdd2;       /* 상세주소 */
	private String memHp;         /* 연락처 */
	private String memMail;       /* 이메일 */
	private String memJob;        /* 직업 코드 */
	private String memHobby;       /* 취미 코드 */ 
	private int memMileage;       /* 마일리지 */
	private String memDelYn;     /* 탈퇴여부 */

	
 
	public String getMemDelYn() {
		return memDelYn;
	}
	public void setMemDelYn(String memDelYn) {
		this.memDelYn = memDelYn;
	}
	public String getMemId() {
		return memId;
	}
	public void setMemId(String memId) {
		this.memId = memId;
	}
	public String getMemPass() {
		return memPass;
	}
	public void setMemPass(String memPass) {
		this.memPass = memPass;
	}
	public String getMemName() {
		return memName;
	}
	public void setMemName(String memName) {
		this.memName = memName;
	}
	public String getMemBir() {
		return memBir;
	}
	public void setMemBir(String memBir) {
		this.memBir = memBir;
	}
	public String getMemZip() {
		return memZip;
	}
	public void setMemZip(String memZip) {
		this.memZip = memZip;
	}
	public String getMemAdd1() {
		return memAdd1;
	}
	public void setMemAdd1(String memAdd1) {
		this.memAdd1 = memAdd1;
	}
	public String getMemAdd2() {
		return memAdd2;
	}
	public void setMemAdd2(String memAdd2) {
		this.memAdd2 = memAdd2;
	}
	public String getMemHp() {
		return memHp;
	}
	public void setMemHp(String memHp) {
		this.memHp = memHp;
	}
	public String getMemMail() {
		return memMail;
	}
	public void setMemMail(String memMail) {
		this.memMail = memMail;
	}
	public String getMemJob() {
		return memJob;
	}
	public void setMemJob(String memJob) {
		this.memJob = memJob;
	}
	public String getMemHobby() {
		return memHobby;
	}
	public void setMemHobby(String memHobby) {
		this.memHobby = memHobby;
	}
	public int getMemMileage() {
		return memMileage;
	}
	public void setMemMileage(int memMileage) {
		this.memMileage = memMileage;
	}
	
	
}

 

Login 성공여부를 결정하는건 DB의 Member테이블이다.  

Member테이블에 접근할 수 있는 Dao를 하나 만들자. 이름은 ILoginDao라고 하겠다.

여기서는 로그인여부를 결정할 getMember와  회원가입을 위한 insertMember가 필요하다

com.study.login.dao에 ILoginDao.java를 만들자.  

ILoginDao.java

package com.study.login.dao;

import org.apache.ibatis.annotations.Mapper;

import com.study.member.vo.MemberVO;

@Mapper
public interface ILoginDao {
	public MemberVO getMember(String memId);
	public int insertMember(MemberVO member);
}

그리고 mybatis mapper파일을 하나만들자. 이름은 member.xml로 하겠다.

member.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="com.study.login.dao.ILoginDao">
	<select id="getMember" parameterType="String" resultType="com.study.member.vo.MemberVO">
	SELECT mem_id, mem_pass,mem_name
	       ,to_char(mem_bir,'YYYY-MM-DD') AS mem_bir 
	       ,mem_zip,mem_add1,mem_add2
	       ,mem_hp,mem_mail
	       ,mem_job,mem_hobby
	       ,mem_mileage,mem_del_yn
	FROM member
	WHERE mem_id=#{memId}
	</select>
	<insert id="insertMember" parameterType="com.study.member.vo.MemberVO" >
	INSERT INTO member ( mem_id , mem_pass, mem_name
		, mem_bir, mem_zip, mem_add1
		, mem_add2, mem_hp, mem_mail
		, mem_job, mem_hobby , mem_mileage
		, mem_del_yn ) VALUES(
		#{memId}, #{memPass}, #{memName},
		#{memBir},
		#{memZip}, #{memAdd1},
		#{memAdd2}, #{memHp}, #{memMail},
		#{memJob},
		#{memHobby}, 0,
		'N'
		)
	</insert>

</mapper>

 

이제 LoginController를 만들자.

메소드는 총 6개다.

  • Login여부에 따라 서로 다른 화면을 보여주는 isLogin.jsp로 가는 isLogin
  • 사용자가 id,pw를 입력할 화면인 login.jsp로 가는 loginGet
  • 사용자가 id,pw를 입력한 걸 처리해줄 loginPost메소드.
    로그인 성공하면 session에 MemberVO 저장 후 redirect로    isLogin을 호출한다.
    로그인 실패하면 redicrect로 loginGet을 호출한다.

  • logout을 처리할  logOut.   redirect로 isLogin을 호출한다
  • 회원가입을 입력폼을 보여줄 memberForm.jsp로 가는 memberForm
  • 사용자가 입력한 회원가입 데이터를 DB에 넣을 meberRegist
    데이터를 DB에 insert한 후에  redirect로 isLogin을 호출한다.

 

 

완성된 LoginController는 다음과 같다.

LoginController.java

package com.study.login.web;

import javax.inject.Inject;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import com.study.login.dao.ILoginDao;
import com.study.member.vo.MemberVO;

@Controller
public class LoginController {
	@Inject
	ILoginDao loginDao;
	
	
	@RequestMapping("/login/isLogin.wow")
	public String isLogin() {
		return "login/isLogin";
	}
	
	@GetMapping("/login/login.wow")
	public String loginGet() {
		return "login/login";
	}
	@PostMapping("/login/login.wow")
	public String loginPost(String id, String pw, HttpSession session) {
		//id, pw는 사용자가 입력한 id와 pw
		MemberVO member=loginDao.getMember(id);
		if(member==null) return "redirect:/login/login.wow";
		else { //id는 맞음
			if(!member.getMemPass().equals(pw)) { //비밀번호는 틀림
				 return "redirect:/login/login.wow";
			}else { //비밀번호도 맞음
				session.setAttribute("MEMBER", member);
				return "redirect:/login/isLogin.wow";
			}
		}
	}
	
	
	@RequestMapping("/login/logout.wow")
	public String logout(HttpSession session) {
		session.removeAttribute("MEMBER");
		return "redirect:/login/isLogin.wow";
	}
	
	
	@RequestMapping("/login/memberForm.wow")
	public String memberForm() {
		return "login/memberForm";
	}
	
	@RequestMapping("/login/memberRegist.wow")
	public String memberRegist(MemberVO member) {
		loginDao.insertMember(member);
		return "redirect:/login/isLogin.wow";
	}
	
	
}

 

 

이제 /WEB-INF/views/login 폴더에 login.jsp와 isLogin.jsp   + memberForm.jsp만 만들어주면 된다.

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" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<%request.setCharacterEncoding("utf-8"); %>
</head>
<body>

	<form action="login.wow" method="post">
		id : <input type="text" name="id"  value=""> <br> 
		pw : <input type="text" name="pw" value=""> <br>
		<button type="submit">로그인</button> 
	</form>

</body>
</html>

 

 

isLogin.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>Insert title here</title>
<%request.setCharacterEncoding("utf-8"); %>
</head>
<body>

<c:if test="${MEMBER  eq null}">  
로그인 안되어있음    <br>
<a href="login.wow">로그인하러가기</a>  <br>
<a href="memberForm.wow">회원가입하러 가기</a>    
</c:if>
 
<c:if test="${MEMBER  ne null}"> 
 로그인 되어 있습니다 <br>
  id : ${MEMBER.memId } <br>
  name : ${MEMBER.memName } <br>
  <a href="logout.wow">로그아웃</a>       </c:if>



</body>
</html>

 

 

 

memberForm.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>Insert title here</title>
<%request.setCharacterEncoding("utf-8"); %>
</head>
<body>

<form action="memberRegist.wow" method="post">
<table border="1">
		<tbody>
			<tr>
				<th>아이디</th>
				<td><input type="text" name="memId" required="required"  ></td>
			</tr>
			<tr>
				<th>비밀번호</th>
				<td><input type="password" name="memPass"  required="required"></td>
			</tr>
			<tr>
				<th>회원명</th>
				<td><input type="text" name="memName"  required="required" ></td>
			</tr>
			<tr>
				<th>우편번호</th>
				<td><input type="text" name="memZip" ></td>
			</tr>
			<tr>
				<th>주소</th>
				<td><input type="text" name="memAdd1" >
					<input type="text" name="memAdd2">
				</td>
			</tr>
			<tr>
				<th>생일</th>
				<td><input type="date" name="memBir" ></td>
			</tr>
			<tr>
				<th>메일</th>
				<td><input type="text" name="memMail"></td>
			</tr>
			<tr>
				<th>핸드폰</th>
				<td><input type="text" name="memHp"></td>
			</tr>
			<tr>
				<th>직업</th>
				<td>
					<input type="tel" name="memJob"  placeholder="JB01 ~ JB04" >			
				</td>
			</tr>
			<tr>
				<th>취미</th>
				<td>
					<input type="tel" name="memHobby"  placeholder="HB01 ~ HB04">				
				</td>
			</tr>			
			<tr>
				<td>
					<button type="submit">회원가입</button>
				</td>
			</tr>
		</tbody>	
	</table>

</form>













</body>
</html>

 


잘 따라했다면  프로젝트 구성 파일은 다음과 같다.