May 27, 2021 Design mode
Intercept filter patterns are used to preprocess/post-process requests or responses to an application. D efine filters and apply them before passing them to the actual target application. F ilters can do authentication/authorization/logging, or track requests and then pass them on to the appropriate handler. The following are the entities of this design pattern.
We'll create FilterChain, FilterManager, Target, Client as various objects that represent entities. ElectronicFilter and DebugFilter represent entity filters.
InterceptingFilterDemo, our demo class uses Client to demonstrate intercept filter design patterns.
Create a filter interface, Filter.
Filter.java
public interface Filter { public void execute(String request); }
Create an entity filter.
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); } }
Create Target.
Target.java
public class Target { public void execute(String request){ System.out.println("Executing request: " + request); } }
Create a filter chain.
FilterChain.java
import java.util.ArrayList; import java.util.List; public class FilterChain { private List filters = new ArrayList(); 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; } }
Create a filter manager.
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); } }
Create a client client.
Client.java
public class Client { FilterManager filterManager; public void setFilterManager(FilterManager filterManager){ this.filterManager = filterManager; } public void sendRequest(String request){ filterManager.filterRequest(request); } }
Use Client to demonstrate intercept filter design patterns.
InterceptingFilterDemo.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"); } }
Verify the output.
Authenticating request: HOME request log: HOME Executing request: HOME