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