[java] JSP에서의 로그인 및 인증 처리 방법

웹 애플리케이션을 개발할 때, 로그인 및 인증 처리는 중요한 부분입니다. JSP(Java Server Pages)에서는 다양한 방법을 사용하여 사용자 인증을 구현할 수 있습니다. 이번 포스트에서는 JSP에서 로그인 및 인증 처리를 위한 기본적인 방법을 살펴보겠습니다.

1. 데이터베이스 설정

먼저, 사용자 정보를 저장할 데이터베이스를 설정해야 합니다. 예를 들어, MySQL 데이터베이스를 사용한다고 가정하겠습니다. 아래는 데이터베이스 테이블의 예입니다.

CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  username VARCHAR(50) NOT NULL,
  password VARCHAR(50) NOT NULL
);

2. 로그인 페이지 생성

다음으로, 로그인 페이지를 생성해야 합니다. 예를 들어, login.jsp 파일을 생성하겠습니다. 로그인 폼과 로그인 처리를 위한 서블릿 경로를 포함해야 합니다.

<form method="post" action="auth.jsp">
  <input type="text" name="username" placeholder="사용자명" required>
  <br>
  <input type="password" name="password" placeholder="비밀번호" required>
  <br>
  <input type="submit" value="로그인">
</form>

3. 인증 처리 서블릿 생성

로그인 처리를 위한 서블릿을 생성해야 합니다. 예를 들어, auth.jsp 파일을 생성하겠습니다. 이 서블릿에서는 사용자가 입력한 사용자명과 비밀번호를 체크하여 인증을 처리합니다.

<%@ page import="java.sql.*" %>
<%
  String username = request.getParameter("username");
  String password = request.getParameter("password");

  Connection conn = null;
  PreparedStatement pstmt = null;
  ResultSet rs = null;
  try {
    Class.forName("com.mysql.jdbc.Driver");
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbname", "username", "password");

    String sql = "SELECT * FROM users WHERE username = ? AND password = ?";
    pstmt = conn.prepareStatement(sql);
    pstmt.setString(1, username);
    pstmt.setString(2, password);
    rs = pstmt.executeQuery();

    if (rs.next()) {
      // 로그인 성공 처리
      response.sendRedirect("home.jsp");
    } else {
      // 로그인 실패 처리
      response.sendRedirect("login.jsp?error=1");
    }
  } catch (Exception e) {
    e.printStackTrace();
  } finally {
    try { rs.close(); } catch (Exception e) { }
    try { pstmt.close(); } catch (Exception e) { }
    try { conn.close(); } catch (Exception e) { }
  }
%>

위의 예제는 간단한 JDBC 코드로, 사용자명과 비밀번호를 받아와 데이터베이스와 비교합니다. 인증이 성공할 경우 home.jsp 페이지로 이동하고, 실패할 경우 login.jsp 페이지로 다시 리다이렉트합니다.

4. 인증 확인과 보안

로그인이 필요한 페이지에서는 사용자가 로그인되어 있는지 확인해야 합니다. 이를 위해 JSP 페이지 상단에 아래와 같이 코드를 추가할 수 있습니다.

<%
  String username = (String) session.getAttribute("username");
  if (username == null) {
    response.sendRedirect("login.jsp");
  }
%>

이렇게 하면, 로그인되지 않은 사용자가 접근을 시도할 경우 로그인 페이지로 리다이렉트됩니다.

또한, 인증 정보를 안전하게 저장하고 처리하기 위해 비밀번호는 단방향 해시 알고리즘으로 저장하는 것이 좋습니다. 예를 들어, BCrypt 라이브러리를 사용하여 비밀번호를 해시화할 수 있습니다.

import org.mindrot.jbcrypt.BCrypt;

String hashedPassword = BCrypt.hashpw(password, BCrypt.gensalt());

5. 세션 관리

사용자가 로그인한 후 세션을 사용하여 로그인 상태를 유지할 수 있습니다. 세션을 사용하면 로그인 정보를 서버에 저장하고, 각 요청마다 로그인 상태를 확인할 수 있습니다.

로그인 성공 시 아래와 같이 세션에 사용자명을 저장할 수 있습니다.

session.setAttribute("username", username);

로그아웃 시 아래와 같이 세션을 제거할 수 있습니다.

session.removeAttribute("username");

로그인 상태를 확인할 때는 아래와 같이 세션을 사용합니다.

String username = (String) session.getAttribute("username");
if (username != null) {
  // 로그인 상태 처리
} else {
  // 로그인 되지 않은 상태 처리
}

마무리

이상으로 JSP에서의 로그인 및 인증 처리 방법을 알아보았습니다. 이는 기본적인 방법이며, 보다 복잡한 로그인 및 인증 시나리오에서는 다른 방법을 고려해야 할 수도 있습니다. 참고 자료를 통해 더 자세한 방법을 학습하시기 바랍니다.