【仅供内部供应商使用,不提供对外解答和培训】
【仅供内部供应商使用,不提供对外解答和培训】
无
该接口是继EmbedRequestFilterProvider接口之后,对请求预处理场景需要的再次补充和完善。提供了与过滤器(javax.servlet.Filter)完全等同的效果,可以直接在插件代码中使用,不必要配置web.xml。
该接口不支持热加载。
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(); }
产品线 | 版本 | 支持情况 | 备注 |
---|---|---|---|
FR | 10.0 | 支持 | |
BI | 5.1 | 支持 | |
BI | 5.1.2 | 支持 | |
BI | 5.1.3 | 支持 |
<extra-decision> <GlobalRequestFilterProvider class="your class name"/> </extra-decision>
平台服务初始化模块(DecisionServletInitializer)在启动时,会读取所有插件中实现的GlobalRequestFilterProvider接口,并依次设置到到一个Filter注入到ServletContext中。
该接口与一般的filter一致,可以自行设置过滤任何路由,也可以用于转发或重定向等操作,但不允许用于实现新的web接口服务(虽然代码上能实现,但不符合规范)。
所有的插件实现的GlobalRequestFilterProvider接口执行顺序,通过实现compareTo接口方法指定。默认是根据filterName方法返回值的ASCII码升序排序。
其中externalFilterClassName方法,如果返回值不为空,则表示申明引用一个外部的filter。引入外部filter时,该接口的init、doFilter、destroy三个接口方法就无效了,而会直接使用外部filter对应的接口。注:引入外部filter主要指定执行顺序
同时因为引入外部filter时,就无需配置web.xml了,所以初始化的相关参数需要通过initializationParameters方法指定。而外部filter所在的JAR包,也需要放到产品的WEB-INF/lib目录下
demo地址:demo-global-request-filter
免责声明:所有文档中的开源示例,均为开发者自行开发并提供。仅用于参考和学习使用,开发者和官方均无义务对开源案例所涉及的所有成果进行教学和指导。禁止用于任何商业用途,若作为商用一切后果责任由使用者自行承担。