본문 바로가기
JSP 웹 프로젝트

JSP 웹 프로젝트 (3) 로그인

by s_hoonee 2023. 1. 3.
반응형

대학생을 위한 웹 페이지 제작

사용 언어 : java (jdk 12.0.2), JavaScript, css, html
사용 툴 : Eclipse
데이터베이스 : Mysql
서버 : Tomcat
테스트 브라우저 : Chrome, Edge
파일 : jsp

시스템 구성도


 

 

UserDAO.java 파일

public int login(String userID, String userPassword) {
		String SQL = "select userPassword, userSalt from user where userID = ?";
		try {
			pstmt = conn.prepareStatement(SQL); // DB에 sql문 삽입
			pstmt.setString(1, userID); // 받아온 userID를 ?에 할당하기
			rs = pstmt.executeQuery(); // DB 쿼리 받아올 준비
			if (rs.next()) {
				System.out.println("로그인에서 rs.getString(1) : "+ rs.getString(1)); // DB에서 받아온 저장된 유저 아이디
				System.out.println("입력한 비밀번호 : "+ userPassword); //유저가 입력한 패스워드
				System.out.println("저장된 솔트 : "+ rs.getString(2)); // 해당 패스워드와 짝 지어진 salt 값
				System.out.println("솔트가 결합되어 만들어진 값 : "+ SHA512(userPassword, rs.getString(2))); // 암호화 된 패스워드
				
				
				if (rs.getString(1).equals(SHA512(userPassword, rs.getString(2)))) { // 로그인 창에서 입력한 패스워드 암호화와 저장된 패스워드 비교
					return 1; // 로그인 성공
				} else
					return 0; // 비밀번호 오류
			}
			return -1; // 아이디가 없음
		} catch (Exception e) {
			e.printStackTrace();
		}
		return -2; // 데이터베이스 오류
	}

return 값의 따른 경우 4가지

return 1 : 사용자가 로그인시 입력한 ID가 DB에 있고, ID의 대한 컬럼의 솔트와 입력한 비밀번호를 활용해 SHA-512 함수로 만들어낸 해시값과 ID를 비교하여 성공시 로그인을 성공시킴  

return 0 : 사용자가 로그인시 입력한 ID가 DB에 있지만 입력한 PW가 ID와 일치하지 않음

return -1 :DB에 로그인을 시도한 ID가 없음

return -2 : 데이터 베이스 오류 

System.out.println -> 비밀번호 변환 과정 확인 차 넣은 코드입니다. 잘 이해가 가지 않는 분들만 사용하시면 될 것 같아용


기능 처리

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ page import = "user.UserDAO" %>
    <%@ page import = "java.io.PrintWriter" %>
    <% request.setCharacterEncoding("UTF-8"); %>
    <jsp:useBean id="user" class= "user.User" scope="page" />
    <jsp:setProperty name ="user" property="userID"/>
    <jsp:setProperty name ="user" property="userPassword"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
               <!-- 로그인처리 -->
	<%  // userID에 세션값이 없는 경우
	String userID = null;
	if(session.getAttribute("userID")!= null){
		userID = (String) session.getAttribute("userID");
	}
	if(userID != null){  // session 을 받아서 로그인이 되어 있는 경우
		PrintWriter script = response.getWriter();
		script.println("<script>");
		script.println("alert('이미 로그인이 되어 있습니다.')");
		script.println("location.href = 'main.jsp' ");
		script.println("</script>");
	}
	
	UserDAO userDAO = new UserDAO();
		int result = userDAO.login(user.getUserID(), user.getUserPassword());
		if(result == 1){
			session.setAttribute("userID", user.getUserID());
			PrintWriter script = response.getWriter();
			script.println("<script>");
			script.println("location.href = 'main.jsp' ");
			script.println("</script>");
		}else if (result == 0){
			PrintWriter script = response.getWriter();
			script.println("<script>");
			script.println("alert('비밀번호가 틀립니다.')");
			script.println("history.back()");
			script.println("</script>");
		}else if (result == -1){
			PrintWriter script = response.getWriter();
			script.println("<script>");
			script.println("alert('존재하지 않는 아이디 입니다.')");
			script.println("history.back()");
			script.println("</script>");
		}else if (result == -2){
			PrintWriter script = response.getWriter();
			script.println("<script>");
			script.println("alert('데이터베이스 오류가 발생했습니다..')");
			script.println("history.back()");
			script.println("</script>");
		}
	%>

</body>
</html>