ServletSofaTracerFilter.java
package com.mycim.webapp.filter;
import com.alipay.common.tracer.core.context.trace.SofaTraceContext;
import com.alipay.common.tracer.core.extensions.SpanExtensionFactory;
import com.alipay.common.tracer.core.holder.SofaTraceContextHolder;
import com.alipay.common.tracer.core.span.SofaTracerSpan;
import com.fa.sesa.i18n.Languages;
import com.fa.sesa.threadlocal.LocalContext;
import com.fa.sesa.threadlocal.LocalContextNames;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.webapp.secutiry.jwt.JwtUtils;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @author Johnson W
*/
@Component
@WebFilter(urlPatterns = "/*", filterName = "tracerFilter")
public class ServletSofaTracerFilter implements Filter {
private static final String PROCESS_RRN_KEY = "PROCESSRRN";
private static final String DATA_PERMISSION_KEY = "dataPermissionFlag";
private static final String CHECK_DATA_PERMISSION_KEY = "checkDataPermission";
private static final String SPECIAL_ROLE = "SPECIAL_ROLE";
private static final String IGNORE_PERMISSION = "2";
private static final String MANUAL="MANUAL";
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// no operation and lazy init
}
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
SofaTraceContext sofaTraceContext = SofaTraceContextHolder.getSofaTraceContext();
SofaTracerSpan sofaTracerSpan = sofaTraceContext.getCurrentSpan();
Long facilityRrn = JwtUtils.getFacilityRrn(request);
String userId = JwtUtils.getUserId(request);
String language = JwtUtils.getLanguage(request);
Long userRrn = JwtUtils.getUserRrn(request);
// String processRrns = JwtUtils.getProcessRrns(request);
String dataPermissionFlag = JwtUtils.getDataPermissionFlag(request);
Boolean specialRole = JwtUtils.getSpecialRoleFlag(request);
sofaTracerSpan.setBaggageItem(LocalContextNames.USER_RRN_KEY, userRrn == null ? "0" : userRrn.toString());
sofaTracerSpan.setBaggageItem(LocalContextNames.USER_ID_KEY, userId == null ? "" : userId);
sofaTracerSpan
.setBaggageItem(LocalContextNames.FACILITY_RRN_KEY, facilityRrn == null ? "0" : facilityRrn.toString());
sofaTracerSpan
.setBaggageItem(LocalContextNames.LANGUAGE_KEY, language == null ? Languages.CN.name() : language);
sofaTracerSpan.setBaggageItem(PROCESS_RRN_KEY, StringUtils.EMPTY);
sofaTracerSpan.setBaggageItem(DATA_PERMISSION_KEY, dataPermissionFlag == null ? "" : dataPermissionFlag);
sofaTracerSpan.setBaggageItem(LocalContextNames.TRANS_MODULE_KEY, MANUAL);
sofaTracerSpan.setBaggageItem(CHECK_DATA_PERMISSION_KEY, IGNORE_PERMISSION.equals(dataPermissionFlag)?
Boolean.toString(true) : Boolean.toString(false));
sofaTracerSpan.setBaggageItem(SPECIAL_ROLE, specialRole != null && specialRole?Boolean.TRUE.toString():Boolean.FALSE.toString());
try {
SpanExtensionFactory.logStartedSpan(sofaTracerSpan);
// filter begin
chain.doFilter(request, response);
// filter end
} finally {
LocalContext.clear();
}
}
@Override
public void destroy() {
}
}