차단 필터 모드
가로채기 필터 패턴
가로채기 필터 패턴은 애플리케이션 요청 또는 응답의 일부 전처리/후처리를 수행하는 데 사용됩니다. 필터는 실제 대상 애플리케이션에 전달되기 전에 요청에 정의되고 적용됩니다. 필터는 인증/권한 부여/로깅을 수행하거나 요청을 추적한 다음 해당 요청을 적절한 핸들러에 전달할 수 있습니다. 다음은 이 디자인 패턴의 엔터티입니다.
Filter - 필터는 요청 핸들러가 요청을 실행하기 전이나 후에 특정 작업을 수행합니다.
Filter Chain - 필터 체인은 여러 필터를 전달하고 Target에서 정의된 순서로 실행합니다.
Target - 대상 개체는 요청 처리기입니다.
Filter Manager - 필터 관리자는 필터와 필터 체인을 관리합니다.
Client - 클라이언트는 Target 개체에 요청을 보내는 개체입니다.
Implementation
엔티티를 나타내는 다양한 객체로 FilterChain, FilterManager, Target, Client을 생성하겠습니다. AuthenticationFilter 및 DebugFilter는 엔터티 필터를 나타냅니다.
InterceptingFilterDemo, 데모 클래스에서는 Client를 사용하여 차단 필터 설계 패턴을 보여줍니다.
1단계
필터 인터페이스 필터를 만듭니다.
Filter.java
public interface Filter { public void execute(String request); }
2단계
엔티티 필터를 만듭니다.
AuthenticationFilter.java
public class AuthenticationFilter implements Filter { public void execute(String request){ System.out.println("Authenticating request: " + request); } }
DebugFilter.java
public class DebugFilter implements Filter { public void execute(String request){ System.out.println("request log: " + request); } }
3단계
대상을 생성합니다.
Target.java
public class Target { public void execute(String request){ System.out.println("Executing request: " + request); } }
4단계
필터 체인을 생성합니다.
FilterChain.java
import java.util.ArrayList; import java.util.List; public class FilterChain { private List<Filter> filters = new ArrayList<Filter>(); private Target target; public void addFilter(Filter filter){ filters.add(filter); } public void execute(String request){ for (Filter filter : filters) { filter.execute(request); } target.execute(request); } public void setTarget(Target target){ this.target = target; } }
5단계
필터 관리자를 만듭니다.
FilterManager.java
public class FilterManager { FilterChain filterChain; public FilterManager(Target target){ filterChain = new FilterChain(); filterChain.setTarget(target); } public void setFilter(Filter filter){ filterChain.addFilter(filter); } public void filterRequest(String request){ filterChain.execute(request); } }
6단계
클라이언트 클라이언트를 생성합니다.
Client.java
public class Client { FilterManager filterManager; public void setFilterManager(FilterManager filterManager){ this.filterManager = filterManager; } public void sendRequest(String request){ filterManager.filterRequest(request); } }
7단계
Client를 사용하여 인터셉터 필터 설계 패턴을 시연합니다.
FrontControllerPatternDemo.java
public class InterceptingFilterDemo { public static void main(String[] args) { FilterManager filterManager = new FilterManager(new Target()); filterManager.setFilter(new AuthenticationFilter()); filterManager.setFilter(new DebugFilter()); Client client = new Client(); client.setFilterManager(filterManager); client.sendRequest("HOME"); } }
8단계
출력을 확인합니다.
rreee