처음으로는 관리자 페이지를 만드려고 한다.
그래서 관리자들이 로그인 할 수 있는 로그인 기능을 만들 것이다.
empLoginForm, empLoginAction, empLogoutAction 총 3개의 jsp로 구성할 것이고,
로그인이 되면 empList인 관리자들의 리스트를 출력하는 jsp페이지로 이동할 것이다.
일단 처음에 session의 loginEmp가 비어있지 않다면(= 로그인이 되어있는 것) empList(관리자 리스트 출력페이지)로 redirect 한다.
그리고 errMsg 변수를 선언해 로그인이 실패한 경우 등 메시지를 같이 보내면 요청값으로 받을 수 있게 한다.
사용자가 보는 View 단에는 errMsg가 있을때 errMsg를 함께 보이게 했고
form으로 id, pw값을 입력 받도록 했다
empLoginForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
/* 로그인 인증 분기*/
// 세션 변수 이름 - loginEmp
if(session.getAttribute("loginEmp") != null) {
response.sendRedirect("/shop/emp/empList.jsp");
return;
}
%>
<%
/* 에러 메시지 */
String errMsg = request.getParameter("errMsg");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>empLoginForm</title>
</head>
<body>
<!-- 에러 메시지 출력 -->
<%
if(errMsg != null) {
%>
<div>
<%=errMsg %>
</div>
<%
}
%>
<form action="/shop/emp/empLoginAction.jsp">
<div>
id: <input type="text" name="empId">
</div>
<div>
pw: <input type="password" name="empPw">
</div>
<button type="submit">로그인</button>
</form>
</body>
</html>
loginAction도 마찬가지로 loginEmp 세션이 비어있지 않으면 empList로 가게했다.
id,pw요청값을 받고 [DB]shop.emp에 SELECT쿼리를 보내 id,pw값이 있으면 empId와 empName, grade를 가져오게 했다.
그리고 다이어리 만들때는 ResultSet으로 했지만 ResultSet 같은 경우 JDBC API가 있어야만 값들을 확인할 수 있기때문에 이번 프로젝트부터는 Collection API인 ArrayList와 Map을 이용하도록 했다.
그리고 session.seAtrribute()메서드로 loginEmp라는 세션변수에 Map형태로 저장을 했다.
로그인에 실패하면 errMsg와 함께 empLoginForm으로 redirect하게 했다.
empLoginAction.jsp
<%@page import="java.net.URLEncoder"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.sql.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
/* 로그인 인증 분기*/
// 세션 변수 이름 - loginEmp
if(session.getAttribute("loginEmp") != null) {
response.sendRedirect("/shop/emp/empList.jsp");
return;
}
%>
<%
//DB 연결 및 초기화
Class.forName("org.mariadb.jdbc.Driver");
Connection conn = null;
conn = DriverManager.getConnection("jdbc:mariadb://127.0.0.1:3307/shop", "root", "****");
/* 로그인 하기 */
// id, pw 요청값
String empId = request.getParameter("empId");
String empPw = request.getParameter("empPw");
System.out.println("empLoginAction - empId = " + empId);
System.out.println("empLoginAction - empPw = " + empPw);
/*
[DB]shop.emp에 empId, empPw 확인 SQL문
SELECT emp_id empId
FROM emp
WHERE active='ON' AND emp_id=? AND emp_pw = password(?)
*/
String loginSql = "SELECT emp_id empId, emp_name empName, grade FROM emp WHERE active='ON' AND emp_id=? AND emp_pw = password(?)";
PreparedStatement loginStmt = null;
ResultSet loginRs = null;
loginStmt = conn.prepareStatement(loginSql);
loginStmt.setString(1, empId);
loginStmt.setString(2, empPw);
loginRs = loginStmt.executeQuery();
if(loginRs.next()) {
// 성공 -> /emp/empList.jsp
System.out.println("로그인 성공");
// 하나의 세션변수 안에 여러개의 값을 저장하기 위해 HashMap타입 사용
HashMap<String, Object> loginEmp = new HashMap<String, Object>();
loginEmp.put("empId", loginRs.getString("empId"));
loginEmp.put("empName", loginRs.getString("empName"));
loginEmp.put("grade", loginRs.getInt("grade"));
session.setAttribute("loginEmp", loginEmp);
// 디버깅(loginEmp 세션 변수)
HashMap<String, Object> checkEmp = (HashMap<String, Object>)(session.getAttribute("loginEmp"));
System.out.println((String)(checkEmp.get("empId")));
System.out.println((String)(checkEmp.get("empName")));
System.out.println((Integer)(checkEmp.get("grade")));
response.sendRedirect("/shop/emp/empList.jsp");
} else {
// 실패 -> /emp/empLoginForm.jsp
System.out.println("로그인 실패");
String errMsg = URLEncoder.encode("아이디와 비밀번호가 잘못되었습니다.", "utf-8");
response.sendRedirect("/shop/emp/empLoginForm.jsp?errMsg=" + errMsg);
}
// 자원 반납
loginRs.close();
loginStmt.close();
conn.close();
%>
로그아웃은 간단하다.
loginEmp가 있는 세션의 공간을 초기화하는 invalidate() 메서드를 사용했다.
그 후 empLoginForm으로 redirect하면 끝이다.
empLogoutAction.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
session.invalidate(); // 세션 공간 초기화(포맷)
response.sendRedirect("/shop/emp/empLoginForm.jsp");
%>
'웹 개발 > 쇼핑몰 프로젝트(개인)' 카테고리의 다른 글
쇼핑몰 만들기(6)-상품 관리(상품 수정, 삭제) (0) | 2024.04.15 |
---|---|
쇼핑몰 만들기(5)-상품 관리 (1) | 2024.04.15 |
쇼핑몰 만들기(4)-관리자 상세보기, 부트스트랩 적용 (0) | 2024.04.11 |
쇼핑몰 만들기(3)-관리자 리스트, 관리자 메뉴, 권한 변경 (1) | 2024.04.05 |
쇼핑몰 만들기(1)-관리자페이지 (0) | 2024.04.03 |