private void setTrackingInformation(Span span, HttpServletRequest httpServletRequest, String clientIp, String userAgenHeader) { final String userName = getUserName(httpServletRequest); final String sessionId = getSessionId(httpServletRequest); span.setTag(SpanUtils.USERNAME, userName); span.setTag("session_id", sessionId); if (userName != null) { span.setTag("tracking.unique_visitor_id", StringUtils.sha1Hash(userName)); } else { span.setTag("tracking.unique_visitor_id", StringUtils.sha1Hash(clientIp + sessionId + userAgenHeader)); } SpanUtils.setClientIp(span, clientIp); }
@Test public void testSha1Hash() throws Exception { // result from org.apache.commons.codec.digest.DigestUtils.sha1Hex assertEquals("a94a8fe5ccb19ba61c4c0873d391e987982fbbd3", StringUtils.sha1Hash("test")); } }
@Override public void onFinish(SpanWrapper spanWrapper, String operationName, long durationNanos) { final boolean pseudonymizeUserNames = tracingPlugin.isPseudonymizeUserNames(); final boolean anonymizeIPs = tracingPlugin.isAnonymizeIPs(); if (!anonymizeIPs && !pseudonymizeUserNames) { return; } final String username = spanWrapper.getStringTag(SpanUtils.USERNAME); String hashedUserName = username; if (pseudonymizeUserNames) { hashedUserName = StringUtils.sha1Hash(username); spanWrapper.setTag(SpanUtils.USERNAME, hashedUserName); } final boolean disclose = tracingPlugin.getDiscloseUsers().contains(hashedUserName); if (disclose) { spanWrapper.setTag("username_disclosed", username); } if (anonymizeIPs && !disclose) { final String ipV6Address = spanWrapper.getStringTag(Tags.PEER_HOST_IPV6.getKey()); final Number ipV4Address = spanWrapper.getNumberTag(Tags.PEER_HOST_IPV4.getKey()); if (ipV6Address != null) { Tags.PEER_HOST_IPV6.set(spanWrapper, IPAnonymizationUtils.anonymize(ipV6Address)); } else if (ipV4Address != null) { final Inet4Address anonymizedIp = IPAnonymizationUtils.anonymizeIpV4Address(InetAddresses.fromInteger(ipV4Address.intValue())); Tags.PEER_HOST_IPV4.set(spanWrapper, InetAddresses.inetAddressToInt(anonymizedIp)); } } }