LoginProcessServlet 에서 세션에 ID를 저장하도록 할 것이므로 필터 처리에 예외가 되도록 한다. LoginProcessServlet 를 거치지 않고서는 ID가 세션에 없으므로 무조건 로그인 화면으로 가버리게 되기 때문이다.
package com.study;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class LoginFilter implements Filter {
public void init(FilterConfig _fc) throws ServletException {
}
public void doFilter(ServletRequest _request, ServletResponse _response,
FilterChain _chain) throws IOException, ServletException {
System.out.println("LoginFilter....");
_request.setCharacterEncoding("EUC-KR");
HttpServletRequest hs_request = (HttpServletRequest)_request;
HttpSession hs_session = hs_request.getSession();
String uri = hs_request.getRequestURI();
System.out.println(" => Request URI: " + uri);
if (uri.indexOf("LoginProcess.do") < 0) { // LoginProcess 서블릿은 필터링 예외로 둔다.
String id = (String)hs_session.getAttribute("id");
System.out.println(" => ID: " + id);
if (id == null || id.trim().length() == 0) { // ID가 세션에 없다면
HttpServletResponse hs_response = (HttpServletResponse)_response;
hs_response.sendRedirect("/Round_18/login.htm");
return;
}
}
_chain.doFilter(_request, _response); // '가던 길로 가세요~' 라는 의미 :)
}
public void destroy() {
}
}
LoginProcessServlet.java
로그인 처리 서블릿에서는 세션에 ID를 저장하고 Main.do를 호출한다.
package com.study;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class LoginProcessServlet extends HttpServlet {
public void doPost(HttpServletRequest _request, HttpServletResponse _response)
throws IOException, ServletException {
System.out.println("LoginProcessServlet....");
// 계정 검증 처리 작업
// ....
// 검증 작업 후 ID를 세션에 저장 후 페이지 이동
HttpSession session = _request.getSession();
session.setAttribute("id", _request.getParameter("id"));
_response.sendRedirect("Main.do"); // SendRedirect() : GET 요청 발생
}
}