Filter是服务注册框架为服务端架构的主要实现位置。首先,我们提供web-fragment.xml
<filter>
<filter-name>catLogFilter</filter-name>
<filter-class>com.umetrip.common.filter.UnityAccessFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>catLogFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
在这里,我们让tomcat识别我们的统一入口filter。
filter的结构如下
@Override
public void init(FilterConfig config) throws ServletException {
Filter tlFilter = new ThreadLocalTraceLogFilter();
tlFilter.init(config);
filters.put(new Pattern("/*"),tlFilter);
Filter traceFilter = new TraceLogFilter();
traceFilter.init(config);
filters.put(new Pattern("/*"), traceFilter);
Filter catLogFilter = new CatLogFilter();
catLogFilter.init(config);
filters.put(new Pattern("/*"), catLogFilter);
Filter ipFilter = new IpFilter();
ipFilter.init(config);
filters.put(new Pattern("/*"), ipFilter);
}
我们将分别实现上述filter,并使用FilterChain来让请求依次通过这些filter。
ipFilter就是简单的利用存储的白名单和黑名单进行过滤。catLogFilter就是简单的cat打点。TraceLogFilter使用log4j
的MDC(多线程多用户条件下记录日志)。ThreadLocalTraceLogFilter则是Zipkin的使用。