From 7e8a816575c3348d6ecdd91612521b7abb270785 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johnny=20Miller=20=28=E9=94=BA=E4=BF=8A=29?= Date: Tue, 22 Dec 2020 14:21:27 +0800 Subject: [PATCH] perf($Starter): reduce unnecessary access log reduce unnecessary access log BREAKING CHANGE: reduce unnecessary access log --- .../src/main/resources/application.yml | 13 ++++ .../src/main/resources/application.yml | 13 ++++ .../configuration/IgnoredUrl.java | 69 +++++++++++++++++ .../configuration/MafConfiguration.java | 75 +++++++++++++++++++ ...scleAndFitnessServerAutoConfiguration.java | 15 +++- ...equestFilter.java => AccessLogFilter.java} | 16 +++- .../src/main/resources/application.yml | 0 muscle-mis/src/main/resources/application.yml | 13 ++++ .../src/main/resources/application.yml | 7 ++ .../src/main/resources/application.yml | 13 ++++ 10 files changed, 229 insertions(+), 5 deletions(-) create mode 100644 muscle-and-fitness-server-spring-boot-starter/src/main/java/com/jmsoftware/maf/muscleandfitnessserverspringbootstarter/configuration/IgnoredUrl.java create mode 100644 muscle-and-fitness-server-spring-boot-starter/src/main/java/com/jmsoftware/maf/muscleandfitnessserverspringbootstarter/configuration/MafConfiguration.java rename muscle-and-fitness-server-spring-boot-starter/src/main/java/com/jmsoftware/maf/muscleandfitnessserverspringbootstarter/filter/{RequestFilter.java => AccessLogFilter.java} (63%) create mode 100644 muscle-and-fitness-server-spring-boot-starter/src/main/resources/application.yml diff --git a/auth-center/src/main/resources/application.yml b/auth-center/src/main/resources/application.yml index edeb523f..bb18c8b0 100644 --- a/auth-center/src/main/resources/application.yml +++ b/auth-center/src/main/resources/application.yml @@ -106,3 +106,16 @@ jwt: # an hour ttl: 3600000 ttl-for-remember-me: 604800000 + +maf: + configuration: + ignored-url: + pattern: + - "/static/**" + - "/actuator/**" + - "/druid/**" + - "/swagger-resources/**" + - "/v2/api-docs/**" + - "/*/v2/api-docs/**" + - "/webjars/**" + - "/doc.html" diff --git a/exercise-mis/src/main/resources/application.yml b/exercise-mis/src/main/resources/application.yml index b588276c..5de98c29 100644 --- a/exercise-mis/src/main/resources/application.yml +++ b/exercise-mis/src/main/resources/application.yml @@ -99,3 +99,16 @@ project: developer-name: @developerName@ developer-email: @developerEmail@ developer-url: @developerUrl@ + +maf: + configuration: + ignored-url: + pattern: + - "/static/**" + - "/actuator/**" + - "/druid/**" + - "/swagger-resources/**" + - "/v2/api-docs/**" + - "/*/v2/api-docs/**" + - "/webjars/**" + - "/doc.html" diff --git a/muscle-and-fitness-server-spring-boot-starter/src/main/java/com/jmsoftware/maf/muscleandfitnessserverspringbootstarter/configuration/IgnoredUrl.java b/muscle-and-fitness-server-spring-boot-starter/src/main/java/com/jmsoftware/maf/muscleandfitnessserverspringbootstarter/configuration/IgnoredUrl.java new file mode 100644 index 00000000..f2153b81 --- /dev/null +++ b/muscle-and-fitness-server-spring-boot-starter/src/main/java/com/jmsoftware/maf/muscleandfitnessserverspringbootstarter/configuration/IgnoredUrl.java @@ -0,0 +1,69 @@ +package com.jmsoftware.maf.muscleandfitnessserverspringbootstarter.configuration; + +import com.google.common.collect.Lists; +import lombok.Data; + +import javax.validation.Valid; +import javax.validation.constraints.Pattern; +import java.util.List; + +/** + *

IgnoredUrl

+ *

+ * Ignored URL configuration. + * + * @author Johnny Miller (锺俊), email: johnnysviva@outlook.com + * @date 5/2/20 11:41 PM + **/ +@Data +public class IgnoredUrl { + private interface Constant { + String URL_REGEXP = "^(/[a-z0-9]+-?[a-z0-9]*|/\\*{1,2})*(/[a-z0-9]+\\.[a-z0-9]+)?$"; + } + + /** + * Ignored URL pattern. + */ + @Valid + private List<@Pattern(regexp = Constant.URL_REGEXP) String> pattern = Lists.newArrayList(); + /** + * Ignored GET request. + */ + @Valid + private List<@Pattern(regexp = Constant.URL_REGEXP) String> get = Lists.newArrayList(); + /** + * Ignored POST request. + */ + @Valid + private List<@Pattern(regexp = Constant.URL_REGEXP) String> post = Lists.newArrayList(); + /** + * Ignored DELETE request. + */ + @Valid + private List<@Pattern(regexp = Constant.URL_REGEXP) String> delete = Lists.newArrayList(); + /** + * Ignored PUT request. + */ + @Valid + private List<@Pattern(regexp = Constant.URL_REGEXP) String> put = Lists.newArrayList(); + /** + * Ignored HEAD request. + */ + @Valid + private List<@Pattern(regexp = Constant.URL_REGEXP) String> head = Lists.newArrayList(); + /** + * Ignored PATCH request. + */ + @Valid + private List<@Pattern(regexp = Constant.URL_REGEXP) String> patch = Lists.newArrayList(); + /** + * Ignored OPTIONS request. + */ + @Valid + private List<@Pattern(regexp = Constant.URL_REGEXP) String> options = Lists.newArrayList(); + /** + * Ignored TRACE request. + */ + @Valid + private List<@Pattern(regexp = Constant.URL_REGEXP) String> trace = Lists.newArrayList(); +} diff --git a/muscle-and-fitness-server-spring-boot-starter/src/main/java/com/jmsoftware/maf/muscleandfitnessserverspringbootstarter/configuration/MafConfiguration.java b/muscle-and-fitness-server-spring-boot-starter/src/main/java/com/jmsoftware/maf/muscleandfitnessserverspringbootstarter/configuration/MafConfiguration.java new file mode 100644 index 00000000..af633d8b --- /dev/null +++ b/muscle-and-fitness-server-spring-boot-starter/src/main/java/com/jmsoftware/maf/muscleandfitnessserverspringbootstarter/configuration/MafConfiguration.java @@ -0,0 +1,75 @@ +package com.jmsoftware.maf.muscleandfitnessserverspringbootstarter.configuration; + +import cn.hutool.core.util.ObjectUtil; +import lombok.Data; +import lombok.val; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; +import org.springframework.validation.annotation.Validated; + +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.util.ArrayList; + +/** + *

CustomConfiguration

+ *

Custom configurations which are written in .yml files, containing a variety of fragmentary configs. Such as, + * Druid login info, web security switch, web log and so on.

+ * + * @author Johnny Miller (锺俊), email: johnnysviva@outlook.com + * @date 2019-03-23 14:24 + **/ +@Data +@Validated +@Component +@ConfigurationProperties(prefix = "maf.configuration") +public class MafConfiguration { + /** + *

The username of super user who has no restriction to access any system's resources.

+ *

ATTENTION: The value of username of super user must be equal to the value that is + * persistent in database.

+ */ + @NotBlank + private String superUser = "admin"; + /** + * Ignore URLs + */ + @Valid + private IgnoredUrl ignoredUrl; + /** + *

Web security feature switch. Default is false.

+ * true - disable web security; false - enable web security. + */ + @NotNull + private Boolean webSecurityDisabled = false; + /** + * Web request log switch. Default is false. + *

+ * true - disable web request log; false - enable web request log. + */ + @NotNull + private Boolean webRequestLogDisabled = false; + + /** + * Flatten ignored urls string [ ]. + * + * @return the string [ ] + */ + public String[] flattenIgnoredUrls() { + if (ObjectUtil.isNull(ignoredUrl)) { + return new String[0]; + } + val flattenIgnoredUrls = new ArrayList(); + flattenIgnoredUrls.addAll(ignoredUrl.getGet()); + flattenIgnoredUrls.addAll(ignoredUrl.getPost()); + flattenIgnoredUrls.addAll(ignoredUrl.getDelete()); + flattenIgnoredUrls.addAll(ignoredUrl.getPut()); + flattenIgnoredUrls.addAll(ignoredUrl.getHead()); + flattenIgnoredUrls.addAll(ignoredUrl.getPatch()); + flattenIgnoredUrls.addAll(ignoredUrl.getOptions()); + flattenIgnoredUrls.addAll(ignoredUrl.getTrace()); + flattenIgnoredUrls.addAll(ignoredUrl.getPattern()); + return flattenIgnoredUrls.toArray(new String[0]); + } +} diff --git a/muscle-and-fitness-server-spring-boot-starter/src/main/java/com/jmsoftware/maf/muscleandfitnessserverspringbootstarter/configuration/MuscleAndFitnessServerAutoConfiguration.java b/muscle-and-fitness-server-spring-boot-starter/src/main/java/com/jmsoftware/maf/muscleandfitnessserverspringbootstarter/configuration/MuscleAndFitnessServerAutoConfiguration.java index 08248a88..a6fb7435 100644 --- a/muscle-and-fitness-server-spring-boot-starter/src/main/java/com/jmsoftware/maf/muscleandfitnessserverspringbootstarter/configuration/MuscleAndFitnessServerAutoConfiguration.java +++ b/muscle-and-fitness-server-spring-boot-starter/src/main/java/com/jmsoftware/maf/muscleandfitnessserverspringbootstarter/configuration/MuscleAndFitnessServerAutoConfiguration.java @@ -3,7 +3,7 @@ import com.jmsoftware.maf.muscleandfitnessserverspringbootstarter.aspect.ExceptionControllerAdvice; import com.jmsoftware.maf.muscleandfitnessserverspringbootstarter.aspect.WebRequestLogAspect; import com.jmsoftware.maf.muscleandfitnessserverspringbootstarter.controller.RedirectController; -import com.jmsoftware.maf.muscleandfitnessserverspringbootstarter.filter.RequestFilter; +import com.jmsoftware.maf.muscleandfitnessserverspringbootstarter.filter.AccessLogFilter; import com.jmsoftware.maf.muscleandfitnessserverspringbootstarter.helper.IpHelper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -30,6 +30,13 @@ public void afterInitialization() { log.debug("{} initialization is done. About to inject beans.", getClass().getSimpleName()); } + @Bean + @ConditionalOnMissingBean + public MafConfiguration mafConfiguration() { + log.debug("Initial bean: {}", MafConfiguration.class.getName()); + return new MafConfiguration(); + } + @Bean @ConditionalOnMissingBean public ExceptionControllerAdvice exceptionControllerAdvice() { @@ -53,9 +60,9 @@ public RedirectController redirectController() { @Bean @ConditionalOnMissingBean - public RequestFilter requestFilter() { - log.debug("Initial bean: {}", RequestFilter.class.getName()); - return new RequestFilter(); + public AccessLogFilter requestFilter(MafConfiguration mafConfiguration) { + log.debug("Initial bean: {}", AccessLogFilter.class.getName()); + return new AccessLogFilter(mafConfiguration); } @Bean diff --git a/muscle-and-fitness-server-spring-boot-starter/src/main/java/com/jmsoftware/maf/muscleandfitnessserverspringbootstarter/filter/RequestFilter.java b/muscle-and-fitness-server-spring-boot-starter/src/main/java/com/jmsoftware/maf/muscleandfitnessserverspringbootstarter/filter/AccessLogFilter.java similarity index 63% rename from muscle-and-fitness-server-spring-boot-starter/src/main/java/com/jmsoftware/maf/muscleandfitnessserverspringbootstarter/filter/RequestFilter.java rename to muscle-and-fitness-server-spring-boot-starter/src/main/java/com/jmsoftware/maf/muscleandfitnessserverspringbootstarter/filter/AccessLogFilter.java index 7edac9da..958374ab 100644 --- a/muscle-and-fitness-server-spring-boot-starter/src/main/java/com/jmsoftware/maf/muscleandfitnessserverspringbootstarter/filter/RequestFilter.java +++ b/muscle-and-fitness-server-spring-boot-starter/src/main/java/com/jmsoftware/maf/muscleandfitnessserverspringbootstarter/filter/AccessLogFilter.java @@ -1,8 +1,11 @@ package com.jmsoftware.maf.muscleandfitnessserverspringbootstarter.filter; +import com.jmsoftware.maf.muscleandfitnessserverspringbootstarter.configuration.MafConfiguration; import com.jmsoftware.maf.muscleandfitnessserverspringbootstarter.util.RequestUtil; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; +import org.springframework.util.AntPathMatcher; import org.springframework.web.filter.OncePerRequestFilter; import javax.servlet.FilterChain; @@ -20,11 +23,22 @@ **/ @Slf4j @Component -public class RequestFilter extends OncePerRequestFilter { +@RequiredArgsConstructor +public class AccessLogFilter extends OncePerRequestFilter { + private final MafConfiguration mafConfiguration; + private final AntPathMatcher antPathMatcher = new AntPathMatcher(); + @Override @SuppressWarnings("NullableProblems") protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws IOException, ServletException { + // Ignore URL + for (String ignoredUrl : mafConfiguration.flattenIgnoredUrls()) { + if (antPathMatcher.match(ignoredUrl, request.getRequestURI())) { + filterChain.doFilter(request, response); + return; + } + } log.info("The requester({}) requested resource. Request URL: [{}] {}", RequestUtil.getRequestIpAndPort(request), request.getMethod(), request.getRequestURL()); filterChain.doFilter(request, response); diff --git a/muscle-and-fitness-server-spring-boot-starter/src/main/resources/application.yml b/muscle-and-fitness-server-spring-boot-starter/src/main/resources/application.yml new file mode 100644 index 00000000..e69de29b diff --git a/muscle-mis/src/main/resources/application.yml b/muscle-mis/src/main/resources/application.yml index db195892..b5d8ab75 100644 --- a/muscle-mis/src/main/resources/application.yml +++ b/muscle-mis/src/main/resources/application.yml @@ -87,3 +87,16 @@ project: developer-name: @developerName@ developer-email: @developerEmail@ developer-url: @developerUrl@ + +maf: + configuration: + ignored-url: + pattern: + - "/static/**" + - "/actuator/**" + - "/druid/**" + - "/swagger-resources/**" + - "/v2/api-docs/**" + - "/*/v2/api-docs/**" + - "/webjars/**" + - "/doc.html" diff --git a/service-registry/src/main/resources/application.yml b/service-registry/src/main/resources/application.yml index 2f916af1..f92a0545 100644 --- a/service-registry/src/main/resources/application.yml +++ b/service-registry/src/main/resources/application.yml @@ -47,3 +47,10 @@ project: developer-name: @developerName@ developer-email: @developerEmail@ developer-url: @developerUrl@ + +maf: + configuration: + ignored-url: + pattern: + - "/actuator/**" + super-user: "admin" diff --git a/spring-boot-admin/src/main/resources/application.yml b/spring-boot-admin/src/main/resources/application.yml index 592ae6b0..7a5e7d69 100644 --- a/spring-boot-admin/src/main/resources/application.yml +++ b/spring-boot-admin/src/main/resources/application.yml @@ -62,3 +62,16 @@ project: developer-name: @developerName@ developer-email: @developerEmail@ developer-url: @developerUrl@ + +maf: + configuration: + ignored-url: + pattern: + - "/static/**" + - "/actuator/**" + - "/druid/**" + - "/swagger-resources/**" + - "/v2/api-docs/**" + - "/*/v2/api-docs/**" + - "/webjars/**" + - "/doc.html"