Search
Duplicate
moon
sun

로그인

로그인

클라이언트
로그인 화면 - 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.
i.
번호로 회원 조회 - select( no )
ii.
아이디로 회원 조회 - select( username )
2.
Service
a.
i.
login( user )
b.
i.
login ( user )
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
복사