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

Page tree

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

Skip to end of metadata
Go to start of metadata

一、特殊名词介绍

二、背景、场景介绍

RequestPreHandleProvider接口是10.0早期版本中利用spring的HandlerInterceptorAdapter开放的请求预处理插件接口。主要用于对请求的信息的补充、转换、过滤得预处理场景。

该接口的作用类似于filter,但是实际生效却是在filter之后。

因为接口存在一定的缺陷,现在已不再推荐使用了,仅做兼容保留!

三、接口介绍

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

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

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Created by Zed on 2019/4/8.
 */
public interface RequestPreHandleProvider extends Mutable {

    String MARK_STRING = "RequestPreHandleProvider";

    int CURRENT_LEVEL = 1;

    /**
     * 请求是否需要预处理
     *
     * @param req 请求
     * @return true/false
     */
    boolean accept(HttpServletRequest req);

    /**
     * 请求预处理业务
     *
     * @param req 请求
     * @param res 响应
     * @return 处理完成后是否需要被其他拦截器处理
     */
    boolean preHandle(HttpServletRequest req, HttpServletResponse res);
}

四、支持版本

产品线

版本

支持情况

备注

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

五、插件注册

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

六、原理说明

MVC( DecisionConfiguration)框架初始化时,会注册拦截器,其中包括RequestPreHandleInterceptor,在此拦截器中会调用插件中实现的RequestPreHandleProvider接口

七、特殊限制说明

这个接口看名字是一个可多次申明的适配器接口,但是实际上因为调用设计上存在瑕疵,所以最终每个请求预处理最多生效一个实例。比如有AB两个插件都实现了这个接口~如果A的accept拦截返回了true,则B插件的接口完全不会再执行。

该接口只拦截decision下的请求,且不会拦截URLAliasProvider接口开放的短链接(/url/**)和服务器部署信息接口(/v10/deployment/**)。

这是一个拦截器接口!请勿用于开放新的web服务接口!

八、常用链接

demo地址:demo-request-pre-handler

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

九、开源案例

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


  • No labels