springboot 打印通過攔截器實現打印請求參數日誌,判斷是否攜帶指定參數

使用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 {
    }
}

 

發佈了26 篇原創文章 · 獲贊 6 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章