Spring 게시판 기초-3 로그인, 회원가입
2022. 2. 14. 16:51ㆍSpring/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>
잘 따라했다면 프로젝트 구성 파일은 다음과 같다.