JavaInterceptingFilterPattern(攔截過濾器)
攔截過濾器模式(Intercepting Filter Pattern)用於對應用程式的請求或響應做一些預處理/後處理。定義過濾器,並在把請求傳給實際目標應用程式之前應用在請求上。過濾器可以做認證/授權/記錄日誌,或者跟蹤請求,然後把請求傳給相應的處理程式。以下是這種設計模式的實體。
- 過濾器(Filter) – 過濾器在請求處理程式執行請求之前或之後,執行某些任務。
- 過濾器鏈(Filter Chain) – 過濾器鏈帶有多個過濾器,並在 Target 上按照定義的順序執行這些過濾器。
- Target – Target 物件是請求處理程式。
- 過濾管理器(Filter Manager) – 過濾管理器管理過濾器和過濾器鏈。
- 客戶端(Client) – Client 是向 Target 物件傳送請求的物件。
- 建立過濾器介面 Filter。
/**
* 1. 建立過濾器介面 Filter。
* @author mazaiting
*/
public interface Filter {
/**
* 執行
*/
void execute(String request);
}
- 建立實體過濾器。
/**
* 2. 建立實體過濾器。
* @author mazaiting
*/
public class DebugFilter implements Filter{
public void execute(String request) {
System.out.println("request log: " + request);
}
}
/**
* 2. 建立實體過濾器。
* @author mazaiting
*/
public class AuthenticationFilter implements Filter{
public void execute(String request) {
System.out.println("Authenticating request: " + request);
}
}
- 建立 Target。
/**
* 3. 建立 Target。
* @author mazaiting
*/
public class Target {
public void execute(String request){
System.out.println("Executing request: " + request);
}
}
- 建立過濾器鏈。
/**
* 4. 建立過濾器鏈。
* @author mazaiting
*/
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. 建立過濾管理器。
* @author mazaiting
*/
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);
}
}
- 建立客戶端 Client。
/**
* 6. 建立客戶端 Client。
* @author mazaiting
*/
public class Client {
FilterManager filterManager;
public void setFilterManager(FilterManager filterManager) {
this.filterManager = filterManager;
}
public void sendRequest(String request){
filterManager.filterRequest(request);
}
}
- 使用 Client 來演示攔截過濾器設計模式。
/**
* 7. 使用 Client 來演示攔截過濾器設計模式。
* @author mazaiting
*/
public class Test {
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");
}
}
- 列印結果
Authenticating request: HOME
request log: HOME
Executing request: HOME
相關文章
- 攔截過濾器模式過濾器模式
- Spring 過濾器和攔截器Spring過濾器
- 攔截器(Interceptor)與過濾器(Filter)過濾器Filter
- SpringBoot 攔截器、過濾器、監聽器Spring Boot過濾器
- spring中的過濾器與攔截器Spring過濾器
- 聊一聊過濾器與攔截器過濾器
- springBoot的過濾器,監聽器,攔截器Spring Boot過濾器
- springboot系列文章之過濾器 vs 攔截器Spring Boot過濾器
- 談談 Spring 的過濾器和攔截器Spring過濾器
- SpringBoot實現過濾器、攔截器與切片Spring Boot過濾器
- 過濾器 Filter 與 攔截器 Interceptor 的區別過濾器Filter
- 極簡架構模式-攔截過濾器模式架構模式過濾器
- SpringBoot中的過濾器和攔截器的實現Spring Boot過濾器
- spring boot 新增自定義監聽器、過濾器、攔截器Spring Boot過濾器
- 過濾器、攔截器、AOP、ControllerAdvcie執行順序對比過濾器Controller
- Solon 的過濾器 Filter 和兩種攔截器 Handler、 Interceptor過濾器Filter
- 監聽器,過濾器,攔截器的執行過程和對比過濾器
- Java Filter過濾器(攔截路徑的配置+攔截方式的配置+生命週期+多個過濾器的先後執行順序)JavaFilter過濾器
- 過濾器和攔截器有啥區別,這次會了!過濾器
- springmv的過濾器和攔截器的區別是什麼Spring過濾器
- 過濾器 和 攔截器 6 個區別,別再傻傻分不清了過濾器
- 過濾器 和 攔截器 6個區別,別再傻傻分不清了過濾器
- 萬字長文帶你徹底學會攔截器與過濾器過濾器
- 過濾器攔截器攔截了request後,controller的@RequestBody 無法獲取request內容,報錯 Required request body is missing 的根源過濾器ControllerUI
- Spring 攔截器和過濾器中自動注入為 null 的原因及解決方案Spring過濾器Null
- Springboot通過攔截器攔截請求資訊收集到日誌Spring Boot
- Spring MVC 中的攔截器的使用“攔截器基本配置” 和 “攔截器高階配置”SpringMVC
- SpringMVC攔截器SpringMVC
- axios 攔截器iOS
- spring攔截器Spring
- axios攔截器iOS
- sql攔截器SQL
- Mybatis 攔截器MyBatis
- MyBatis攔截器MyBatis
- Spring Boot使用過濾器和攔截器分別實現REST介面簡易安全認證Spring Boot過濾器REST
- SpringMVC攔截器,設定不攔截的URLSpringMVC
- Mybatis Interceptor 攔截器MyBatis
- spring boot 攔截器Spring Boot
- SpringMVC-攔截器SpringMVC