Az interceptáló szűrő a Java EE egy programtervezési mintája. A minta cserélhető szűrőket hoz létre, hogy beavatkozzon általános szolgáltatásokba, anélkül, hogy a belső működés megváltozna. A szűrők kezelhetik a kéréseket és a válaszokat, előzetes vagy utólagos feldolgozást végezve. A szűrők módosíthatók vagy eltávolíthatók anélkül, hogy a kódon lényegi változtatásokat végeznének. A minta átlátható újrafelhasználható feldolgozást végez azelőtt és azután, hogy a front és a lapvezérlők működésbe lépnének. Szerkezete Komponensei a szűrőkezelő, szűrőlánc, szűrők és a célpont.

A szűrőkezelő vezérli a szűrési folyamatot, létrehozza a szűrőláncot a szükséges szűrőkkel a megfelelő sorrendben, és kezdeményezi a feldolgozást.

A szűrőlánc független szűrők rendezett együttese.

A szűrők egymástól függetlenül alkalmazhatók a célpontra. Az általuk végzett feldolgozást a szűrőlánc koordinálja.

A célpont a kliens által igényelt erőforrás.

Előnyei és hátrányai A minta alkalmazása a következő előnyökkel és hátrányokkal jár: Újrafelhasználhatóság javítása: A szűrők és a központi egység egymástól függetlenül kezelhetők, cserélhetők, újrafelhasználhatók Rugalmasság növelése: A szűrők és a központ különálló egység Hosszú szűrőláncok lelassíthatják a programot, és az áttekinthetőséget is rontják. Példa kód A példa kód Javában készült. A szűrő általános, feldolgozást nem végez.

A szűrő:

public class DebuggingFilter implements Processor { private Processor target;

public DebuggingFilter(Processor myTarget) { target = myTarget;

public void execute(ServletRequest req, ServletResponse res) throws IOException, ServletException { //Do some filter processing here, such as // displaying request parameters target.execute(req, res);

Központi egység:

public class CoreProcessor implements Processor { private Processor target; public CoreProcessor() { this(null);

public CoreProcessor(Processor myTarget) { target = myTarget;

public void execute(ServletRequest req, ServletResponse res) throws IOException, ServletException { //Do core processing here

Kérések feldolgozása:

public void processRequest(ServletRequest req, ServletResponse res) throws IOException, ServletException { Processor processors = new DebuggingFilter( new AuthenticationFilter(new CoreProcessor())); processors.execute(req, res);

//Then dispatch to next resource, which is probably // the View to display dispatcher.dispatch(req, res); }

Szűrőkezelő:

public void processRequest(ServletRequest req, ServletResponse res) throws IOException, ServletException { Processor processors = new DebuggingFilter( new AuthenticationFilter(new CoreProcessor())); processors.execute(req, res);

//Then dispatch to next resource, which is probably // the View to display dispatcher.dispatch(req, res); }

Szűrőlánc:

public class FilterChain { // filter chain private List<Filter> myFilters = new ArrayList<>();

// Creates new FilterChain public FilterChain() { // plug-in default filter services for example // only. This would typically be done in the // FilterManager, but is done here for example // purposes myFilters.add(new DebugFilter()); myFilters.add(new LoginFilter()); myFilters.add(new AuditFilter());

public void processFilter( javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException { Filter filter;

// apply filters for (final Filter filter : filters)

// pass request & response through various // filters filter.execute(request, response);

Jegyzetek

Fordítás

Kategória:Programtervezési minták Kategória:Java-kódpéldák Kategória:Java enterprise platform