在后台服务端开发中,有请求的发送、处理,当然就会有拦截器的需求,例如在服务端通过拦截器统一进行请求认证等操作,这些就需要拦截器来完成,
1. 服务端拦截器
我们可以在服务端处理请求之前将请求拦截下来,统一进行权限校验等操作,也可以在服务端将请求处理完毕之后,准备响应的时候将响应拦截下来,可以对响应进行二次处理。
首先我们来看请求拦截器,实际上是一个监听器:
publicclassBookServiceCallListener<R> extendsForwardingServerCallListener<R> {}
这里我们自定义一个类,继承自 ForwardingServerCallListener 类,在这里重写 onMessage 方法,当有请求到达的时候,就会经过这里的 onMessage 方法。如果我们需要对传入的参数进行验证等操作,就可以在这里完成。
二、响应拦截器
publicclassBookServiceCall<ReqT,RespT> extendsForwardingServerCall.SimpleForwardingServerCall<ReqT,RespT>{}
这里是重写 sendMessage 方法,在这个方法中我们可以对服务端准备返回给客户端的消息进行预处理。
所以这个位置就相当于响应拦截器。
三、配置拦截器
最后,我们需要在启动服务的时候,将这两个拦截器配置进去,代码如下:
returnnewBookServiceCallListener<>(next.startCall(newBookServiceCall(call), headers));
这是我之前服务启动的方法,以前我们调用 addService 方法的时候,直接添加对应的服务就可以了,现在,我们除了添加之前的 BookServiceImpl 服务之外,还额外给了一个拦截器。