- vừa được xem lúc

[Design Patterns] Intercepting Filter

0 0 14

Người đăng: Semi Art

Theo Viblo Asia

Intercepting Filter (màng chắn) được sử dụng khi chúng ta muốn thực hiện các thao tác tiền xử lý / hậu xử lý với các yêu cầu request hoặc phản hồi response của ứng dụng. Các filter được định nghĩa và áp dụng lên các request trước khi chuyển tới lớp xử lý chính hoặc các response trước khi chuyển tới máy khách client. Các filter có thể thực hiện các chức năng như xác thực đăng nhập / ghi nhật ký / hoặc theo dõi các request, rồi sau đó chuyển các request tới lớp xử lý tương ứng. Sau đây là các thành phần có mặt trong pattern:

  • Client - object gửi yêu cầu request tới Target hoặc nhận response.
  • Target - object xử lý request hoặc response.
  • Filter - thực hiện các tác vụ trước hoặc sau xử lý request hoặc response.
  • Filter Chain - chứa một bộ các Filter giúp chúng ta thực hiện theo thứ tự.
  • Filter Manager - quản lý các Filter và cả Filter Chain.

Áp dụng triển khai

  • Chúng ta sẽ tạo ra một Client để gửi requestTarget để xử lý.
  • Sau đó thêm FilterManager cho Target để bổ sung các Filter tiền xử lý cho các request.

Ở đây với một ví dụ đơn giản thì chúng ta sẽ không tách filterChain thành một class riêng mà có thể sử dụng giao diện List có sẵn. Cách thêm các Filter tiền xử lý cho response cũng tương tự.

Bước 1

Tạo ClientTarget.

interceptingfilter/Client.java

package interceptingfilter; public class Client { private Target target; public void setTarget(Target target) { this.target = target; } public void sendRequest(String request) { target.processRequest(request); }
}

interceptingfilter/Target.java

package interceptingfilter; public class Target { private FilterManager filterManager; public void setFilterManager(FilterManager filterManager) { this.filterManager = filterManager; } public void processRequest(String request) { filterManager.processRequest(request); System.out.println("Processing request: " + request); }
}

Bước 2

Tạo FilterManager để thêm các Filter cho Target.

interceptingfilter/FilterManager.java

package interceptingfilter; import interceptingfilter.filter.AuthenticationFilter;
import interceptingfilter.filter.DebugFilter;
import interceptingfilter.filter.Filter; import java.util.ArrayList;
import java.util.List; public class FilterManager { private List<Filter> filterChain = new ArrayList<Filter>(); public FilterManager() { filterChain.add(new AuthenticationFilter()); filterChain.add(new DebugFilter()); } void setFilter(Filter filter) { filterChain.add(filter); } void processRequest(String request) { filterChain.forEach((filter) -> filter.process(request)); }
}

Bước 3

Tạo interface Filter và các class triển khai tiền xử lý request.

interceptingfilter/filter/Filter.java

package interceptingfilter.filter; public interface Filter { void process(String request);
}

interceptingfilter/filter/AuthenticationFilter.java

package interceptingfilter.filter; public class AuthenticationFilter
implements Filter { @Override public void process(String request) { System.out.println("Authenticating request: " + request); }
}

interceptingfilter/filter/DebugFilter.java

package interceptingfilter.filter; public class DebugFilter
implements Filter { @Override public void process(String request) { System.out.println("Request log: " + request); }
}

Bước 4

Sử dụng ClientTarget để thử hoạt động của pattern.

PatternDemo.java

import interceptingfilter.Client;
import interceptingfilter.FilterManager;
import interceptingfilter.Target;
import interceptingfilter.filter.AuthenticationFilter;
import interceptingfilter.filter.DebugFilter;
import interceptingfilter.filter.Filter; public class PatternDemo { public static void main(String[] args) { FilterManager fm = new FilterManager(); Filter authFilter = new AuthenticationFilter(); Filter debugFilter = new DebugFilter(); fm.setFilter(authFilter); fm.setFilter(debugFilter); Target target = new Target(); target.setFilterManager(fm); Client client = new Client(); client.setTarget(target); client.sendRequest("Home"); }
}

Bước 5

Kiểm chứng lại kết quả được in ra ở console.

Authenticating request: Home
Request log: Home
Processing request: Home

Bình luận

Bài viết tương tự

- vừa được xem lúc

Closure trong Javascript - Phần 2: Định nghĩa và cách dùng

Các bạn có thể đọc qua phần 1 ở đây. Để mọi người không quên, mình xin tóm tắt gọn lại khái niệm lexical environment:.

0 0 51

- vừa được xem lúc

Var vs let vs const? Các cách khai báo biến và hằng trong Javascript

Dạo này mình tập tành học Javascript, thấy có 2 cách khai báo biến khác nhau nên đã tìm tòi sự khác biệt. Nay xin đăng lên đây để mọi người đọc xong hy vọng phân biệt được giữa let và var, và sau đó là khai báo hằng bằng const.

0 0 31

- vừa được xem lúc

VueJS: Tính năng Mixins

Chào mọi người, hôm nay mình sẽ viết về Mixins và 1 số vấn đề trong sử dụng Mixins hay ho mà mình gặp trong dự án thực. Trích dẫn từ trang chủ của VueJS:.

0 0 27

- vừa được xem lúc

Asset Pipeline là cái chi chi?

Asset Pipeline. Asset pipeline là cái chi chi. . Giải thích:.

0 0 47

- vừa được xem lúc

Tạo data table web app lấy dữ liệu từ Google Sheets sử dụng Apps Script

Google Sheets là công cụ tuyệt vời để lưu trữ bảng tính trực tuyến, bạn có thể truy cập bảng tính bất kỳ lúc nào ở bất kỳ đâu và luôn sẵn sàng để chia sẻ với người khác. Bài này gồm 2 phần.

0 0 266

- vừa được xem lúc

Học Deep Learning trên Coursera miễn phí

Bạn muốn bắt đầu với Deep Learning nhưng không biết bắt đầu từ đâu? Bạn muốn có một công việc ở mức fresher về Deep Learning? Bạn muốn khoe bạn bè về kiến thức Deep Learning của mình. Bắt đầu từ đâu.

0 0 35