【仅供内部供应商使用,不提供对外解答和培训】

Page tree

【仅供内部供应商使用,不提供对外解答和培训】

Skip to end of metadata
Go to start of metadata

一、特殊名词介绍

二、背景、场景介绍

该接口是继RequestPreHandleProvider接口之后,对请求预处理场景需要的一个补充和完善的接口。提供了与过滤器(javax.servlet.Filter)几乎同等的效果,可以直接在插件代码中使用,不必要配置web.xml。

该接口可以热加载。

三、接口介绍

EmbedRequestFilterProvider.java
package com.fr.decision.fun;

import com.fr.stable.fun.mark.Mutable;

import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * 内置的Servlet的过滤器
 */
public interface EmbedRequestFilterProvider extends Mutable {

    String MARK_STRING = "EmbedRequestFilterProvider";

    int CURRENT_LEVEL = 2;

    /**
     * 初始化过滤器
     * 注:该接口生效必须重启服务器
     * @param filterConfig 过滤器配置
     */
    void init(FilterConfig filterConfig);

    /**
     * 过滤servlet
     * @param req http请求
     * @param res http响应
     */
    void filter(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException;


    /**
     * 销毁过滤器
     */
    void destroy();
}


四、支持版本

产品线

版本

支持情况

备注

FR10.0支持
BI5.1支持
BI5.1.2支持
BI5.1.3支持

五、插件注册

plugin.xml
<extra-decision>
    <EmbedRequestFilterProvider class="your class name"/>
</extra-decision>

六、原理说明

平台服务初始化模块(DecisionServletInitializer)在启动时,会向ServletContext中注入一个filter,同时监听插件的启动和停止,动态缓存所有插件中的EmbedRequestFilterProvider接口实例,在filter执行时依次执行插件中的EmbedRequestFilterProvider接口实例。

七、特殊限制说明

该接口仅支持对内置的Servlet做过滤,也就是只能过滤/decision这个路由。

该接口的执行除非异常否则无法终止后续逻辑的执行。也就是只能用于请求头信息的补充、调整、完善等跟响应无关的预处理。不能用于转发、重定向、输出响应内容的场景。

该接口无法指定不同插件间的相同接口的执行顺序,同一插件内的多个实例则按plugin.xml中的申明先后顺序执行。

八、常用链接

demo地址:demo-embed-request-filter

插件中四种实现filter功能的接口对比

九、开源案例

免责声明:所有文档中的开源示例,均为开发者自行开发并提供。仅用于参考和学习使用,开发者和官方均无义务对开源案例所涉及的所有成果进行教学和指导。禁止用于任何商业用途,若作为商用一切后果责任由使用者自行承担。

open-JSD-7747

open-JSD-7449

  • No labels