accessLog 忽略Url提供可配置

This commit is contained in:
b2baccline
2020-06-12 01:14:38 +08:00
parent bd522b1d8a
commit 5d47e45e96
4 changed files with 45 additions and 16 deletions

View File

@@ -12,7 +12,7 @@ import java.util.Map;
*/
public class ModifyParamMapRequestWrapper extends HttpServletRequestWrapper {
private Map<String, String[]> parameterMap;
private final Map<String, String[]> parameterMap;
public ModifyParamMapRequestWrapper(HttpServletRequest request, Map<String, String[]> parameterMap) {
super(request);

View File

@@ -6,6 +6,7 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
@@ -17,18 +18,19 @@ import org.springframework.context.annotation.Bean;
@Slf4j
@ConditionalOnWebApplication
@RequiredArgsConstructor
@EnableConfigurationProperties(AccessLogProperties.class)
public class AccessLogAutoConfiguration {
private final AccessLogHandler<?> accessLogService;
private final AccessLogProperties accessLogProperties;
@Bean
@ConditionalOnClass(AccessLogHandler.class)
public FilterRegistrationBean<AccessLogFilter> accessLogFilterRegistrationBean(){
log.debug("access log 记录拦截器已开启====");
FilterRegistrationBean<AccessLogFilter> registrationBean =
new FilterRegistrationBean<>(new AccessLogFilter(accessLogService));
new FilterRegistrationBean<>(new AccessLogFilter(accessLogService, accessLogProperties.getIgnoreUrlPatterns()));
registrationBean.setOrder(0);
return registrationBean;
}
}

View File

@@ -0,0 +1,22 @@
package com.hccake.ballcat.commom.log.access;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import java.util.Arrays;
import java.util.List;
/**
* @author Hccake
* @version 1.0
* @date 2020/6/11 14:56
*/
@Data
@ConfigurationProperties(prefix = "ballcat.log.access")
public class AccessLogProperties {
/**
* 忽略的Url匹配规则Ant风格
*/
private List<String> ignoreUrlPatterns = Arrays.asList("/actuator/**", "/webjars/**");
}

View File

@@ -1,10 +1,10 @@
package com.hccake.ballcat.commom.log.access.filter;
import cn.hutool.core.util.StrUtil;
import com.hccake.ballcat.commom.log.access.handler.AccessLogHandler;
import com.hccake.ballcat.commom.log.util.LogUtils;
import com.hccake.ballcat.common.core.request.wrapper.RepeatBodyRequestWrapper;
import lombok.AllArgsConstructor;
import lombok.RequiredArgsConstructor;
import org.springframework.util.AntPathMatcher;
import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.FilterChain;
@@ -12,15 +12,22 @@ import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
/**
* @author Hccake
* @version 1.0
* @date 2019/10/15 21:53
*/
@AllArgsConstructor
@RequiredArgsConstructor
public class AccessLogFilter extends OncePerRequestFilter {
private final AccessLogHandler<?> accessLogService;
private final List<String> ignoreUrlPatterns;
/**
* 针对需忽略的Url的规则匹配器
*/
private final static AntPathMatcher ANT_PATH_MATCHER = new AntPathMatcher();
/**
* Same contract as for {@code doFilter}, but guaranteed to be
@@ -36,12 +43,14 @@ public class AccessLogFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
// 排除监控请求 TODO 可配置
if (StrUtil.containsAnyIgnoreCase(request.getRequestURI(), "/actuator", "/webjars")) {
filterChain.doFilter(request, response);
return;
}
// 跳过部分忽略 url
String requestUri = request.getRequestURI();
for (String ignoreUrlPattern : ignoreUrlPatterns) {
if(ANT_PATH_MATCHER.match(ignoreUrlPattern, requestUri)){
filterChain.doFilter(request, response);
return;
}
}
// 包装request以保证可以重复读取body 但不对文件上传请求body进行处理
HttpServletRequest requestWrapper;
@@ -76,8 +85,4 @@ public class AccessLogFilter extends OncePerRequestFilter {
}
}
}