[java] 서블릿에서의 로그인과 인증 처리
서블릿은 웹 애플리케이션 개발에서 많이 사용되는 기술 중 하나입니다. 이번 글에서는 서블릿에서 로그인과 인증 처리에 대해 알아보겠습니다.
1. 로그인 기능 구현하기
로그인은 사용자가 애플리케이션에 접속하여 자신의 계정으로 인증하는 과정입니다. 서블릿에서는 일반적으로 아래와 같은 절차를 따릅니다.
- 클라이언트에서 아이디와 비밀번호를 서버로 전송합니다.
- 서버에서 받은 아이디와 비밀번호를 확인하여 유효한 사용자인지 검증합니다.
- 검증이 성공하면, 사용자를 로그인 상태로 설정합니다.
- 로그인 상태를 유지하기 위해 세션에 사용자 정보를 저장합니다.
아래는 위 절차를 구현한 예시 코드입니다.
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
// 아이디와 비밀번호 검증 로직
if (username.equals("admin") && password.equals("password")) {
// 로그인 성공
HttpSession session = request.getSession();
session.setAttribute("loggedInUser", username);
response.sendRedirect("/home");
} else {
// 로그인 실패
response.sendRedirect("/login.html");
}
}
}
위 코드에서는 doPost()
메서드를 통해 클라이언트로부터 받은 아이디와 비밀번호를 검증하여 로그인 성공 여부를 판단합니다. 로그인 성공 시 HttpSession
을 사용하여 세션에 사용자 정보를 저장하고, /home
으로 리다이렉트합니다. 로그인 실패 시 /login.html
로 리다이렉트됩니다.
2. 인증 처리하기
로그인 후에는 인증된 사용자가 특정 페이지에 접근할 수 있는지를 검사해야 합니다. 일반적으로 서블릿 필터를 사용하여 인증 처리를 구현합니다.
아래는 실제 로그인 상태인지를 검사하는 필터의 예시 코드입니다.
@WebFilter("/*")
public class AuthFilter implements Filter {
private static final List<String> allowedUrls = Arrays.asList("/login", "/login.html");
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
String url = httpRequest.getServletPath();
// 로그인 페이지는 인증 처리를 하지 않음
if (allowedUrls.contains(url)) {
chain.doFilter(request, response);
return;
}
// 인증된 사용자인지 확인
HttpSession session = httpRequest.getSession(false);
if (session != null && session.getAttribute("loggedInUser") != null) {
chain.doFilter(request, response);
} else {
// 인증되지 않은 사용자는 로그인 페이지로 리다이렉트
httpResponse.sendRedirect("/login.html");
}
}
}
AuthFilter
는 모든 요청에 대해 호출됩니다. allowedUrls
에는 인증을 처리하지 않아도 되는 URL을 등록해 놓습니다. 인증되지 않은 사용자는 인증 처리를 하지 않은 상태로 접근하지 못하도록 리다이렉트됩니다.