로그인
클라이언트
•
로그인 화면 - login.jsp
•
로그인 요청
◦
요청 경로 : login_pro.jsp
◦
요청 메소드 : post
◦
파라미터
▪
username
▪
password
•
로그인 실패
◦
“아이디 또는 비밀번호가 일치하지 않습니다.”
서버
•
로그인 요청 처리
•
UserService
◦
login( user )
•
UserServiceImpl
◦
로그인 처리 로직 - login( user )
▪
아이디로 회원 조회
▪
비밀번호 일치 여부 확인
▪
아이디&비밀번호 일치
로그인 성공
로그인 성공▪
아이디&비밀번호 불일치
로그인 실패
로그인 실패•
UserDAO
◦
번호로 회원 조회 - select( no )
◦
아이디로 회원 조회 - select( username )
•
응답
◦
로그인 성공
▪
세션에 사용자 정보 등록
▪
리다이렉트 : 메인 화면
•
경로 : /
◦
로그인 실패
▪
리다이렉트 : 로그인
•
경로 : /login?error=0
작업순서
1.
DAO
a.
2.
3.
JSP
a.
로그인 요청 페이지
i.
login.jsp
b.
로그인 요청 처리
i.
login_pro.jsp
DAO
UserDAO.java (DAO)
1.
번호로 회원 조회 - select( no )
2.
아이디로 회원 조회 - select( username )
/**
* 회원 번호로 조회
* @param no
* @return
*/
public Users select(int no) {
String sql = " SELECT * "
+ " FROM users"
+ " WHERE no = ? ";
Users user = null;
try {
psmt = con.prepareStatement(sql);
psmt.setInt(1, no);
rs = psmt.executeQuery();
if( rs.next() ) {
user = new Users();
user.setNo( rs.getInt("no") );
user.setUsername( rs.getString("username") );
user.setPassword( rs.getString("password") );
user.setName( rs.getString("name") );
user.setEmail( rs.getString("email") );
user.setEnabled( rs.getBoolean("enabled") );
user.setCreatedAt( rs.getTimestamp("created_at") );
user.setUpdatedAt( rs.getTimestamp("updated_at") );
}
} catch (Exception e) {
System.err.println("회원 정보 번호로 조회 시 예외 발생");
e.printStackTrace();
}
return user;
}
/**
* 회원 아이디로 조회
* @param username
* @return
*/
public Users select(String username) {
String sql = " SELECT * "
+ " FROM users"
+ " WHERE username = ? ";
Users user = null;
try {
psmt = con.prepareStatement(sql);
psmt.setString(1, username);
rs = psmt.executeQuery();
if( rs.next() ) {
user = new Users();
user.setNo( rs.getInt("no") );
user.setUsername( rs.getString("username") );
user.setPassword( rs.getString("password") );
user.setName( rs.getString("name") );
user.setEmail( rs.getString("email") );
user.setEnabled( rs.getBoolean("enabled") );
user.setCreatedAt( rs.getTimestamp("created_at") );
user.setUpdatedAt( rs.getTimestamp("updated_at") );
}
} catch (Exception e) {
System.err.println("회원 정보 아이디로 조회 시 예외 발생");
e.printStackTrace();
}
return user;
}
Java
복사
Service
1.
login( user )
package shop.Service;
import shop.DTO.Users;
public interface UserService {
// 회원가입
public int signup(Users user);
// 로그인
public Users login(Users user);
}
Java
복사
1.
login ( user )
@Override
public Users login(Users user) {
String username = user.getUsername();
Users selectedUser = userDAO.select(username);
// 회원 가입이 안 된 아이디
if( selectedUser == null )
return null;
// 비밀번호 일치 여부 확인
String loginPassword = user.getPassword();
String password = selectedUser.getPassword();
// * BCrypt.checkpw(로그인 비밀번호, 암호호된 비밀번호);
boolean check = PasswordUtils.check(loginPassword, password);
// 비밀번호 불일치
if( !check )
return null;
// 로그인 성공
return selectedUser;
}
Java
복사
Servlet
로그인 요청 처리
LoginServlet.java
package shop.servlet;
import java.io.IOException;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import shop.DTO.Users;
import shop.service.UserService;
import shop.service.UserServiceImpl;
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(
HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
protected void doPost(
HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 아이디 비밀번호 가져오가
String username = request.getParameter("username");
String password = request.getParameter("password");
// 로그인 요청
Users user = Users.builder()
.username(username)
.password(password)
.build();
UserService userService = new UserServiceImpl();
Users loginUser = userService.login(user);
// 로그인 실패
if( loginUser == null ) {
// 다시 로그인 화면으로 이동
response.sendRedirect("login.jsp?error=0");
return;
}
// 로그인 성공
HttpSession session = request.getSession();
if( loginUser != null ) {
// 세션에 사용자 정보 등록 (아이디, 이름)
session.setAttribute("username", loginUser.getUsername());
session.setAttribute("name", loginUser.getName());
// 메인 화면으로 이동
String root = request.getContextPath();
response.sendRedirect(root + "/");
}
}
}
Java
복사
JSP
로그인 요청 페이지
1.
login.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String root = request.getContextPath();
pageContext.setAttribute("root", root);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인</title>
</head>
<body>
<h1>로그인</h1>
<form action="${ root }/login" method="post">
<p>아이디 : <input type="text" name="username" id="username" /> </p>
<p>비밀번호 : <input type="password" name="password" id="password" /> </p>
<p>
<input type="submit" value="로그인" />
</p>
</form>
</body>
</html>
HTML
복사





