|
|
@ -1,9 +1,12 @@ |
|
|
|
package com.epmet.commons.tools.filter; |
|
|
|
|
|
|
|
import com.epmet.commons.tools.constant.AppClientConstant; |
|
|
|
import com.epmet.commons.tools.constant.ThreadLocalConstant; |
|
|
|
import com.epmet.commons.tools.exception.ExceptionUtils; |
|
|
|
import com.epmet.commons.tools.utils.EpmetRequestHolder; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
import org.apache.commons.lang3.StringUtils; |
|
|
|
import org.slf4j.MDC; |
|
|
|
|
|
|
|
import javax.servlet.*; |
|
|
|
import javax.servlet.annotation.WebFilter; |
|
|
@ -24,8 +27,17 @@ public class GlobalFilter implements Filter { |
|
|
|
@Override |
|
|
|
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { |
|
|
|
try { |
|
|
|
// 获取request中的header,放入RequestHeaderHolder,用于异步环境下的上下文透传
|
|
|
|
HashMap<String, String> headerMap = getHeadersFromRequest((HttpServletRequest) servletRequest); |
|
|
|
String tranSerial = headerMap.get(AppClientConstant.TRANSACTION_SERIAL_KEY.toLowerCase()); |
|
|
|
|
|
|
|
if (StringUtils.isBlank(tranSerial)) { |
|
|
|
tranSerial = generateTransactionSerial(); |
|
|
|
EpmetRequestHolder.addHeader(AppClientConstant.TRANSACTION_SERIAL_KEY, tranSerial); |
|
|
|
} |
|
|
|
|
|
|
|
MDC.put(AppClientConstant.TRANSACTION_SERIAL_KEY, tranSerial); |
|
|
|
|
|
|
|
// 获取request中的header,放入RequestHeaderHolder,用于异步环境下的上下文透传
|
|
|
|
EpmetRequestHolder.addHeaders(headerMap); |
|
|
|
|
|
|
|
filterChain.doFilter(servletRequest, servletResponse); |
|
|
@ -37,7 +49,7 @@ public class GlobalFilter implements Filter { |
|
|
|
clear(ThreadLocalConstant.requirePermissionTl, "requirePermissionTl"); |
|
|
|
clear(ThreadLocalConstant.requestParam, "requestParam"); |
|
|
|
EpmetRequestHolder.clearAllHeaders(); |
|
|
|
System.out.println("清理完成"); |
|
|
|
MDC.clear(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -73,4 +85,21 @@ public class GlobalFilter implements Filter { |
|
|
|
log.error("【GlobalFilter】清空ThreadLocal失败,{}, {}", tag, errorMsg); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 获取事务流水号 |
|
|
|
* |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
public String generateTransactionSerial() { |
|
|
|
String[] letterPool = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n" |
|
|
|
, "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"}; |
|
|
|
|
|
|
|
StringBuilder sb = new StringBuilder(); |
|
|
|
for (int i = 0; i < 4; i++) { |
|
|
|
sb.append(letterPool[(int) (Math.random() * 25)]); |
|
|
|
} |
|
|
|
|
|
|
|
return sb.append(System.currentTimeMillis()).toString(); |
|
|
|
} |
|
|
|
} |