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>