In the section RPC Framework - Filter Request Interception, we learned about the working mechanism of Filters and some built-in Filter implementations provided by the Dubbo framework. In this article, we will learn how to extend custom filter implementations: a unified Filter processor that can handle and validate returned results, reducing disruptions to developers.
The complete source code for this example can be found at dubbo-samples-extensibility. In addition to this example, many Filter implementations in the Dubbo core repository apache/dubbo and the extension library apache/dubbo-spi-extensions can serve as reference implementations.
Uniformly append 's customized AppendedFilter to the returned results of all requests calling Provider services.
Customize a Filter in the Provider to modify the return results.
src
 |-main
    |-java
        |-org
            |-apache
                |-dubbo
                    |-samples
                        |-extensibility
                            |-filter
                                |-provider
                                    |-AppendedFilter.java (Implements Filter interface)
    |-resources
        |-META-INF
            |-application.properties (Dubbo Provider configuration file)
            |-dubbo
                |-org.apache.dubbo.rpc.Filter (Plain text file)
package org.apache.dubbo.samples.extensibility.filter.provider;
import org.apache.dubbo.rpc.Filter;
import org.apache.dubbo.rpc.Result;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.RpcException;
import org.apache.dubbo.rpc.AsyncRpcResult;
public class AppendedFilter implements Filter {
    @Override
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
        Result result= invoker.invoke(invocation);
        // Obtain the returned value
        Result appResponse = ((AsyncRpcResult) result).getAppResponse();
        // Appended value
        appResponse.setValue(appResponse.getValue()+"'s customized AppendedFilter");
        return result;
    }
}
Add the following configuration to the resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter file:
appended=org.apache.dubbo.samples.extensibility.filter.provider.AppendedFilter
Add the following configuration to the resources/application.properties file to activate the custom Filter implementation:
# Apply AppendedFilter
dubbo.provider.filter=appended
In addition to activating the Filter implementation via configuration, you can also add the @Activate annotation to the implementation class to automatically activate it under certain conditions, such as:
@Activate(group="provider")
public class AppendedFilter implements Filter {}
This Filter implementation will be automatically activated on the Provider side.
Running the task using a local IDE, the result is as follows:
