Dev/Spring boot

스프링부트 미니 프로젝트 : Spring boot 도서관리시스템 웹 만들기 (4. 로그인form.jsp, controller, Dao, mapper, session이용)

uragil 2022. 11. 18. 17:26
반응형

login.jsp

회원가입을 성공했으면 로그인폼을 만들자

중복되는 부분은 패스하고

 

form을사용하여 button submit action 이 발생하면 input된 정보를 post 방식으로 loginOK로 보내주는 구문

<form action="loginOk" method="post"> 

 

조인 폼을 만들 때와 다른 것은 크게 없다. 

인풋 창이 두 개뿐이라 더 쉽게 작성 가능

login.jsp 전체 (table안에 table을 넣어 줄 맞춤이 지저분....)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">

<title>로그인</title>
<link rel="stylesheet" href="${pageContext.request.contextPath }/resources/css/menu.css?after">
<link rel="stylesheet" href="${pageContext.request.contextPath }/resources/css/board.css?after">
<link rel="stylesheet" href="${pageContext.request.contextPath }/resources/css/header.css?after">
<link rel="stylesheet" href="${pageContext.request.contextPath }/resources/css/member.css?after">
<link rel="stylesheet" href="${pageContext.request.contextPath }/resources/css/main.css?after">
<link rel="stylesheet" href="${pageContext.request.contextPath }/resources/css/content.css?after">
</head>

<body>
<%@ include file="header.jsp" %>
	<center>	
		<table width="70%" border="0" cellspacing="0" cellpadding="10">
			<tr height="530">
				<td bgcolor="#cba" align="center" height="500">
				<form action="loginOk" method="post">
				<table bgcolor="#210" height="120" width="300" cellspacing="10px">
					<tr align="center" height="50">
                        <td class="board_br" colspan="2" >
                        <span class="content07">로그인</span>
                        </td>
                    </tr>
                    <tr align="right" >
                        <td>
                            <span class="text01"> ID :</span>
                        </td>
                        <td>
                            <input type="text" name="mid">
                        </td>
                    </tr>

                    <tr align="right">
                        <td>
                            <span class="text01">PW :</span>
                        </td>
                        <td>
                            <input  type="password" name="mpw">
                        </td>
                    </tr>
                    <tr>
                        <td colspan="2"  align="right">
                            <input class="button01" type="submit" value="로그인">
                        </td>
                    </tr>
                    <tr>	
                		<td colspan="2"  align="right">
                    		<input class="button04" type="button" value="회원가입" onclick="location.href='join'">
                        </td>
                    </tr>					
                </table>
            </td>
        </tr>
    </table>
    </form>
	</center>
<%@ include file="footer.jsp" %>	
</body>
</html>

 

loginOk.jsp

로그인에서 submit action으로 loginOk로 넘어오면 로그인 정보확인과 세션생성 로그인 성공 실패 안내를 해주는 페이지

 

DB에 input 받은 id가 존재하는지 체크하는 checkId의 값을 저장 
int checkId = Integer.parseInt(request.getAttribute("checkId").toString());

 

DB에 input 받은 id와 pw를 동시에 만족하는 data를 체크하는 checkPw의 값을 저장

int checkPw = Integer.parseInt(request.getAttribute("checkPw").toString());

 

아이디가 존재하지 않는다면 alert을 띄우고 이전 페이지로 이동

if(checkId == 0) {

<script type="text/javascript">
alert("입력하신 아이디는 존재하지 않는 아이디입니다.");
history.go(-1);

document.reg_frm.mid.focus();

 

입력받은 아이디와 패스워드를 갖고 있는 데이터가 없다면 alert을 띄우고 이전 페이지로 이동

}else if(checkPw == 0){

<script type="text/javascript">
alert("입력하신 비밀번호가 틀립니다.");
history.go(-1);
document.reg_frm.mpw.focus();

 

아이디 비번 확인 후 문제가 없다면 세션을 생성하고(ValidMem 값 대신 id값을 비교하게 만들어서 쓸모없어짐) 

}else{
session.setAttribute("ValidMem", "yes"); 

 

컨트롤러 세션에서 setAttribute하고 model에 담아 보낸 mname과 mid를 가져와 환영인사를 해준다.

${mname } 님 안녕하세요
${mid} ID로 로그인에 성공하셨습니다.  

 

loginok.jsp 전체

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 성공</title>
<link rel="stylesheet" href="${pageContext.request.contextPath }/resources/css/member.css?after">
<link rel="stylesheet" href="${pageContext.request.contextPath }/resources/css/main.css?after">
<link rel="stylesheet" href="${pageContext.request.contextPath }/resources/css/menu.css?after">
</head>
<body>
	<%@ include file="include/header.jsp" %>
	<center>	
		<table width="70%" border="0" cellspacing="0" cellpadding="20">
			<tr height="500">
				<td bgcolor="#cba" align="center">
					<%
						int checkId = Integer.parseInt(request.getAttribute("checkId").toString());
						int checkPw = Integer.parseInt(request.getAttribute("checkPw").toString());
						if(checkId == 0) {
					%>
					<script type="text/javascript">
						alert("입력하신 아이디는 존재하지 않는 아이디입니다.");
						history.go(-1);
						document.reg_frm.mid.focus();
					</script>
					<%
						}else if(checkPw == 0){
					%>
					<script type="text/javascript">
						alert("입력하신 비밀번호가 틀립니다.");
						history.go(-1);
						document.reg_frm.mpw.focus();
					</script>
					<%					
						}else{
							session.setAttribute("ValidMem", "yes");
						}
					%>
					${mname } 님 안녕하세요
					<span class="text03">${mid}</span> ID로 로그인에 성공하셨습니다.			 
					<hr>
					<input class="button03" type="button" value="홈으로" onclick="location.href='home'">
				</td>		
			</tr>
		</table>
	</center>
	<%@ include file="include/footer.jsp" %>
</body>
</html>

 

Controller(loing, loginok, logout)

 

loginok 

로그인폼에서 넘어온 mid, mpw를 가져와서 저장

String mid = request.getParameter("mid");
String mpw = request.getParameter("mpw");

 

dao 실행
IDao dao = sqlSession.getMapper(IDao.class);

 

mid가 db에 존재하는지 체크하는 dao - 쿼리는 mapper에서 

int checkId = dao.checkIdDao(mid);

 

입력받은 id와 pw가 일치하는지 확인하는 dao
int checkPw = dao.checkPwDao(mid, mpw);

 

chckId, checkPw값을 model.addAttribute에 담아 보낸다.

model.addAttribute("checkId", checkId);
model.addAttribute("checkPw", checkPw);

 

결괏값이 1이면 해당 id의 pw가 일치하는 것
if (checkPw == 1) {

 

해당 id의 logininfo를 MemberDto에 담는다. 
MemberDto memberDto = dao.loginInfoDao(mid);

 

세션값을 memberDto에서 가져와서 세팅 해준다. 

HttpSession session = request.getSession();
session.setAttribute("id", memberDto.getMid());
session.setAttribute("name", memberDto.getMname());

 

세팅한 세션값을 model에 실어 보낸다. 
model.addAttribute("mid", memberDto.getMid());
model.addAttribute("mname", memberDto.getMname());

 

logout

세션을 종료하고 로그인 페이지로 리턴

session.invalidate();

 

controller 추가분

@RequestMapping(value="/login")
	public String login() {
		
		return "login";
	}
    
@RequestMapping(value = "/loginOk", method=RequestMethod.POST)
	public String loginOk(HttpServletRequest request, Model model) {		
		String mid = request.getParameter("mid");
		String mpw = request.getParameter("mpw");
		IDao dao = sqlSession.getMapper(IDao.class);
		int checkId = dao.checkIdDao(mid);
		int checkPw = dao.checkPwDao(mid, mpw);
		model.addAttribute("checkId", checkId);
		model.addAttribute("checkPw", checkPw);
						
		if (checkPw == 1) {
			MemberDto memberDto = dao.loginInfoDao(mid);
			HttpSession session = request.getSession();
			session.setAttribute("id", memberDto.getMid());
			session.setAttribute("name", memberDto.getMname());
			model.addAttribute("mid", memberDto.getMid());
			model.addAttribute("mname", memberDto.getMname());
			}
		return "loginOk";
	}
    
@RequestMapping(value = "/logout")
	public String logout(HttpSession session) {
		session.invalidate();
		return "login";			
	}

 

Dao

id와 pw를 받아 DB에 해당 data가 있는지 체크하는 checkPwDao

id를 받아 해당 id의 정보들을 찾는 loginInfoDao 를 추가해주고

public int checkPwDao(String mid, String mpw);
public MemberDto loginInfoDao(String mid);

 

mapper

checkPwDao

id로 들어온 param1 pw로 들어온 param2 가 b_member테이블에 있는지 카운트해주는 쿼리

리턴 값은 0, 1로 정수형으로 받는다. 

 

loginInfoDao

resultType은 정보들을 저장할 수 있는 MemberDto 배열로 받는다. 

<select id="loginInfoDao" resultType="com.uragil.LMS.dto.MemberDto">

 

idao.xml(추가 분)

<select id="checkPwDao" resultType="int">
		SELECT COUNT(*) FROM b_member WHERE mid = #{param1} AND mpw = #{param2}
</select>

<select id="loginInfoDao" resultType="com.uragil.LMS.dto.MemberDto">
    SELECT * FROM b_member WHERE mid = #{param1}
</select>

 

admin으로 로그인 시도 로그인 성공 페이지가 보이고 head의 메뉴가 변하는 것을 확인 할 수 있다. 

 

다음은 도서관리페이지 만들기

반응형