not POJO 특수 클래스인 servlet를 상속받는 하위 특수 클래스로
43일차 배웠던 리스너(Listener) 외 이번에 배운 필터도 있다.
이 필터의 흐름은 V --> C 이렇게 넘어가는 중간에 Filter 가 실행된다.
Filter 도 servlet이기 때문에 web.xml에 추가되지만 해당 방식은 옛날 방식이니
@ 어노테이션을 사용하여 특정 url이 실행되면 filter가 적용되도록 해주면 된다.
filter는 ServletRequest 를 사용하기 때문에
HttpServletRequest로 타입 캐스팅을 하여 request session 등을 사용할 수 있다.
HttpServletRequest httpRequest = (HttpServletRequest)request;
필터는 보통 보안, 인가, 허가, 인증, 권한확인, 인코딩 등을 사용하기 때문에
리스너 처럼 무언가 샘플 데이터 처리를 하는 것에는 적절하지 않다.
코드를 간단하게 확인해봅시다.
import java.io.IOException;
import jakarta.servlet.Filter;
import jakarta.servlet.FilterChain;
import jakarta.servlet.FilterConfig;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.annotation.WebFilter;
import jakarta.servlet.http.HttpFilter;
import jakarta.servlet.http.HttpServletRequest;
@WebFilter("*.do")
public class ValidFilter extends HttpFilter implements Filter {
public ValidFilter() {
super();
}
public void destroy() {
System.out.println("로그 : 필터 종료");
}
//요청때마다 실행될 메서드
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// 다음 필터를 호출하는 역할이다.
// 만약 다음 필터가 없다면 원래 요청을 수행한다.
//권한 확인 로직
// 1. 사용자가 무슨 요청을 했는지 추출 및 확인
HttpServletRequest httpRequest = (HttpServletRequest)request;
String uri=httpRequest.getRequestURI();
String cp=httpRequest.getContextPath();
String command=uri.substring(cp.length());
System.out.println("command : "+command);
// if(만약 사용자가 /mypagePage.do 요청을 했니?) {
// if(로그인 안했니?) {
// }
// }
if(command.equals("/mypagePage.do")) {
if(httpRequest.getSession().getAttribute("logininfo") == null) {
throw new NullPointerException(); // uncheck 예외
}
}
chain.doFilter(request, response);
}
//필터 시작
public void init(FilterConfig fConfig) throws ServletException {
System.out.println("로그 : 필터 시작");
}
}
728x90
'국비 내용 정리 > HTML' 카테고리의 다른 글
국비 45일차 내용 정리(성공 실패 여부 정보 띄우기) (1) | 2024.09.04 |
---|---|
국비 44일차 내용 정리 (0) | 2024.09.03 |
국비 43일차 내용 정리(Listener) (0) | 2024.09.02 |
국비 39일차 내용 정리 (0) | 2024.08.28 |
국비 36일차 내용 정리(비동기 처리) (0) | 2024.08.22 |