jsp

MVC2 패턴 JSP Filter(필터)

0304호 2022. 12. 7. 15:30

임시방편으로 세션값에 로그인된 아이디가 없다면 글 작성을 못하게 설정했다.

if(command.equals("/board/board_write.board")) {//등록화면
	//세션값에 아이디가 없다면 글작성을 못함
	if(session.getAttribute("user_id")==null) {
		response.sendRedirect("../user/user_login.user");
		return;
	}	
	request.getRequestDispatcher("board_write.jsp").forward(request, response);
}

하지만 필터를 사용하면 더 쉽게 할 수 있다.

Filter(필터)란 서블릿으로 들어가기전 요청을 가로채 검사하는 역할을 맡는다.



필터의 생성방법 :

1. 필터클래스는 일반 java파일로 생성한다

2. Filter 인터페이스를 상속받는다

3. 일반적으로 doFilter메서드를 오버라이딩한다

4. 사용후 doFilter(request,response)메서드를 반드시 사용한다


필터의 사용방법 : 

1. 어노테이션 사용

특정 링크들에 대한 요청을 넣는다

@WebFilter({"/board/writer.board", "/board/modify.board", "/board/update.board", "/board/delete.board" })

2. Web.xml에 설정

( 필터가 여러개가 된다면 반드시 XML을 사용해야한다 )


필터를 만들면 자동적으로 생성된다

(extends HttpFilter)에 달려있는 메서드

//필터가 시작할때 사용
public void init(FilterConfig fConfig) throws ServletException { }

//필터가 없어질때 사용
public void destroy() {	}

필터의 기본적인 모습

(filter 인터페이스를 상속받고있다)

@WebFilter("/AuthFilter")
public class AuthFilter implements Filter {
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

			//필터가 여러개라면 다음필터로 연결한다
		chain.doFilter(request, response);
	}
}

중괄호를 열어 배열식으로 어노테이션에 여러개를 넣을 수 있다

@WebFilter({"/board/board_write.board", 
			"/board/board_modify.board", 
			"/board/registForm.board", 
			"/board/updateForm.board", 
			"/board/board_delete.board"})

Web.xml만드는법


XML에서 필터를 등록하는 방법

  <!-- 필터를 등록하는 방법과 필터체이닝 -->
  <filter>
  <filter-name>필터이름</filter-name>
  <filter-class>패키지명을 포함한 전체경로</filter-class>
  </filter>

2개의 필터를 연달아서 사용할 수 있다

 <!-- 필터체이닝 -->
  <filter>
  	<filter-name>A</filter-name>
  	<filter-class>com.example.util.filter.AuthFilter</filter-class>
  </filter>
  
  <filter-mapping>
  	<filter-name>A</filter-name>
  	<url-pattern>/board/board_write.board</url-pattern>
  </filter-mapping>
  
  <filter>
  	<filter-name>B</filter-name>
  	<filter-class>com.example.util.filter.AuthFilter2</filter-class>
  </filter>
  
  <filter-mapping>
  	<filter-name>B</filter-name>
  	<url-pattern>/board/board_write.board</url-pattern>
  </filter-mapping>