✨ accessLog 忽略Url提供可配置
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -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/**");
|
||||
}
|
||||
@@ -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 {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user