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

Page tree

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

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

一、特殊名词介绍

二、背景、场景介绍

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

该接口不支持热加载。

三、接口介绍

GlobalRequestFilterProvider.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;
import java.util.Map;

/**
 * 全局的过滤器,该接口的实现必须重启服务器才能生效
 */
public interface GlobalRequestFilterProvider extends Mutable, Comparable<GlobalRequestFilterProvider> {

    String MARK_STRING = "GlobalRequestFilterProvider";

    int CURRENT_LEVEL = 1;

    /**
     * 过滤器的名字
     *
     * @return 过滤器名字
     */
    String filterName();


    /**
     * 匹配的地址
     *
     * @return 匹配的地址集合
     */
    String[] urlPatterns();

    /**
     * 外部的过滤器类名,需要把相应的jar包放到web服务器的classpath中
     * @return 类名
     */
    String externalFilterClassName();

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

    /**
     * 过滤器的初始化参数
     * @return 参数集合
     * @since 2019-01-02
     */
    Map<String, String> initializationParameters();

    /**
     * 过滤servlet
     * @param req http请求
     * @param res http响应
     * @param filterChain 过滤链表
     */
    void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain filterChain) 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

九、开源案例

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


  • No labels