package com.alibaba.doris.dataserver.core;
/**
* 实现该接口需要注意线程安全的问题,目前提供的默认实现是非线程安全的。
*
* @author ajun Email:jack.yuj@alibaba-inc.com
*/
public interface RequestFilterChian {
void doFilter(Request request, Response response);
/**
* 往FilterChain中增加一个Filter
*
* @param filter
*/
public void addFilter(RequestFilter filter);
/**
* 往FilterChain的最后位置插入一个Filter,如果FilterChain中已经存在过类似的Filter<br>
* 该方法会抛出异常,表示最后位置的Filter已经被占用。
*
* @param filter
*/
public void addLastFilter(RequestFilter filter);
/**
* 声明往FilterChain的起始位置插入一个Filter,如果FilterChain中已经存在一个类似的<br>
* Filter,方法会抛出异常,标识其实位置已经被占用。
*
* @param filter
*/
public void addFirstFilter(RequestFilter filter);
/**
* 往FilterChain插入一个Filter,并且声明该Filter必须在指定的currentFilter位置之后。<br>
* 注意,如果最后一个元素声明为Last Filter,并且调用者希望新插入的Filter为Last Filter<br>
* 后,则方法会抛出异常。
*
* @param currentFilter 当前已经存在于FilterChain中的一个Filter实例。
* @param filter 待插入FilterChain中的一个Filter实例,函数执行成功后,filter一定<br>
* 在currentFilter之后。
*/
public void addFilterAfter(RequestFilter currentFilter, RequestFilter filter);
/**
* 根据名称(Filter的Class名称)获取FilterChain中的Filter对象实例,<br>
* 如果存在返回对象实例,否则返回null;
*
* @param requestFilterName
* @return
*/
public RequestFilter getRequestFilter(String requestFilterName);
}