필터
- HTTP 요청과 응답을 변경할 수 있는 재사용 가능한 코드
• 필터의 기본구조
- 요청의 내용을 변경하거나 , 응답의 내용을 변경가능
- 1개 이상의 필터 연동 가능
필터예제
LoginCheckFilter.java - 로그인필터클래스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; //필터 예제 @WebFilter("/member/*") public class LoginCheckFilter implements Filter { // 필터가 웹 컨테이너에서 삭제될 때 호출된다. public void destroy() { // TODO Auto-generated method stub } //체인을 따라 다음에 존자하는 필터로 이동. //체인의 가장 마지막 에는 클라이언트가 요청한 최종 자원이 위치 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; // 1. request 파라미터를 이용하여 요청의 필터 작업 수행 //getSession을 false로 지정하지않으면 session을 새로 생성 (기본값 = true) HttpSession session = httpRequest.getSession(false); boolean login = false; // 세션이 있는 경우 if (session != null) { if (session.getAttribute("MEMBER") != null) { login = true; } } //세션이 있는경우 @WebFilter("/member/*") if (login) { chain.doFilter(request, response); } else { //세션이 없는 경우 loginForm 으로 포워딩 RequestDispatcher dispatcher = request.getRequestDispatcher("/loginForm.jsp"); dispatcher.forward(request, response); } } //필터를 초기화할 때 호출된다. public void init(FilterConfig fConfig) throws ServletException { // TODO Auto-generated method stub } } | cs |
LoginForm.jsp - 로그인 폼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>로그인 폼</title> <style> </style> </head> <body> <form action="<%=request.getContextPath()%>/login.jsp"> 아이디<input type="text" name="memberId"> 암호<input type="password" name="password"> <input type="submit" value="로그인"> </form> <a href ="<%=request.getContextPath()%>/member/mypage.jsp">접속 없이 마이페이지</a> </body> </html> | cs |
login.jsp - 입력한 id로 세션을 생성하는 action.jsp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% String memberId = request.getParameter("memberId"); session.setAttribute("MEMBER", memberId); %> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title></title> <style> </style> </head> <body> </body> </html> | cs |
mypage.jsp - 세션이 있는 경우에만 접근가능
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <style> </style> </head> <body> <h1>세션 아이디 : ${MEMBER}</h1> </body> </html> | cs |
세션이 있는 경우 : member/mypage.jsp로 포워딩.
세션이 없는 경우 : /login.jsp 로 포워딩.
→ 로그인 검사 필터클래스를 정의해 놓고 사용하면 세션을 사용하는 경우에 코드중복을 막을 수 있다.
'프로그래밍 > JSP' 카테고리의 다른 글
필터 - 캐릭터 인코딩 (0) | 2018.07.21 |
---|---|
파일 업로드 (0) | 2018.07.20 |
MVC 패턴 구현 (0) | 2018.07.19 |
JSP 환경구축2 (이클립스 설정) (0) | 2018.06.09 |
JSP 환경구축 1(이클립스+Tomcat설치 + 설정) (0) | 2018.06.09 |