使用SpringBoot 中MVC 的 Interceptor 來實現接口入口參數的日誌打印.
@Component
public class LogInterceptor implements HandlerInterceptor {
private Logger logger = LoggerFactory.getLogger(LogInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
if (request.getDispatcherType().equals(DispatcherType.ASYNC)) {
return true;
}
if (logger.isInfoEnabled()) {
StringBuilder sb = new StringBuilder("請求地址爲:").append(request.getRequestURI()).append(" 請求參數爲:");
Enumeration<String> paramNames = request.getParameterNames();
boolean hasParam = false;
while (paramNames.hasMoreElements()) {
hasParam = true;
String paramName = (String) paramNames.nextElement();
String value = request.getParameter(paramName);
sb.append(paramName).append(Constant.LEFT_BRACKET).append(value).append(Constant.RIGHT_BRACKET);
}
if (!hasParam) {
sb.append("無");
}
logger.info(sb.toString());
}
// 獲取請求IP地址
String ipAddr = request.getHeader("X-Forwarded-For");
if (ipAddr == null || ipAddr.trim().length() == 0) {
ipAddr = request.getHeader("Proxy-Client-IP");
}
if (ipAddr == null || ipAddr.trim().length() == 0) {
ipAddr = request.getHeader("WL-Proxy-Client-IP");
}
if (ipAddr == null || ipAddr.trim().length() == 0) {
ipAddr = request.getRemoteAddr();
}
request.setAttribute("ClientIP", ipAddr);
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
}
}
通過攔截器判斷請求參數中是否攜帶某個參數
@Component
@Slf4j
public class SyncInterceptor implements HandlerInterceptor {
@Value("${batch.batchKey}")
private String batchKey;
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
String batchKey = httpServletRequest.getParameter("batchKey");
String errorMsg = "驗證失敗,無法進行操作";
if (StringUtils.isBlank(batchKey)) {
sendErrorMsg(httpServletResponse, errorMsg);
return false;
};
if (!this.batchKey.equals(batchKey)) {
sendErrorMsg(httpServletResponse, errorMsg);
return false;
} ;
return true;
}
public void sendErrorMsg(HttpServletResponse httpServletResponse, String errorMsg) throws IOException {
log.info(errorMsg);
httpServletResponse.setStatus(500);
PrintWriter out = httpServletResponse.getWriter();
out.print(errorMsg);
out.flush();
out.close();
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
}
}