package com.central.gateway.filter; import cn.hutool.core.util.StrUtil; import eu.bitwalker.useragentutils.UserAgent; import com.central.gateway.utils.ReactiveAddrUtil; import com.central.log.monitor.PointUtil; import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.filter.GlobalFilter; import org.springframework.core.Ordered; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.stereotype.Component; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono; import java.util.Map; /** * 请求统计分析埋点过滤器 * * @author zlt * @date 2019/10/7 *

* Blog: https://blog.csdn.net/zlt2000 * Github: https://github.com/zlt2000 */ @Component public class RequestStatisticsFilter implements GlobalFilter, Ordered { @Override public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { ServerHttpRequest request = exchange.getRequest(); Map headers = request.getHeaders().toSingleValueMap(); UserAgent userAgent = UserAgent.parseUserAgentString(headers.get("User-Agent")); //埋点 PointUtil.debug("1", "request-statistics", "ip=" + ReactiveAddrUtil.getRemoteAddr(request) + "&browser=" + getBrowser(userAgent.getBrowser().name()) + "&operatingSystem=" + getOperatingSystem(userAgent.getOperatingSystem().name())); return chain.filter(exchange); } @Override public int getOrder() { return 0; } private String getBrowser(String browser) { if (StrUtil.isNotEmpty(browser)) { if (browser.contains("CHROME")) { return "CHROME"; } else if (browser.contains("FIREFOX")) { return "FIREFOX"; } } return browser; } private String getOperatingSystem(String operatingSystem) { if (StrUtil.isNotEmpty(operatingSystem)) { if (operatingSystem.contains("MAC_OS_X")) { return "MAC_OS_X"; } else if (operatingSystem.contains("ANDROID")) { return "ANDROID"; } } return operatingSystem; } }