
모든 기능을 알 때에는 그 기능의 목적과 사용방법을 위주로 공부해야 하는 거 같다...
자세히 들어가기 전에 한번 예제 소스를 확인해보자
@Slf4j
public class CustomFilter implements Filter {
@Override
public void doFilter(
ServletRequest request,
ServletResponse response,
FilterChain chain
) throws IOException, ServletException {
// Filter에서 수행할 Logic
HttpServletRequest httpRequest = (HttpServletRequest) request;
String requestURI = httpRequest.getRequestURI();
log.info("request URI={}", requestURI);
// chain 이 없으면 Servlet을 바로 호출
chain.doFilter(request, response);
}
}
일단 먼저 위의 doFilter의 함수가 Filter를 상속받은 CutomFilter 클래스 내부에 있다.
그렇게 되면 당연히 상속 받은 Filter 내부의 함수를 Override를 하여 구현해야한다.
이 과정에서 검증과 인증 혹은 예외처리가 가능할 수 있는 것이다.
HttpServletRequest httpRequest = (HttpServletRequest) request;
이부분을 확대해 보면 다운캐스팅으로 HttpServletRequest로 변경 후에 사용하게 된다.
이유는 기능의 차이 때문이다.
getRequestURI 이 함수 즉 URI를 받아오는 함수를 사용하기 위한 캐스팅이라고 한다.
그러면 이 함수를 이용하여 다음과 같은 함수를 만들 수 있다.
public boolean isProperAccess(String brURIType);
api를 호출하는 mapping된 URI가 몇 개 없으면 if를 사용해도 되지만
개수가 많아지게 되면 String으로 URI를 반환받아 값의 존재를 확인해도 가능하다.