Skip to content

Commit

Permalink
:logging got rid of spring-security
Browse files Browse the repository at this point in the history
  • Loading branch information
iakunin committed Jan 31, 2025
1 parent 115e58b commit e65ba00
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 48 deletions.
3 changes: 1 addition & 2 deletions src/logging/logging-reactive/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ jar.enabled = true

archivesBaseName = "library-logging-reactive"

project.version = "1.0.3"
project.version = "1.0.4"

apply from: "$rootDir/gradle/publishing.gradle"

Expand All @@ -14,7 +14,6 @@ dependencies {

annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
implementation "org.springframework.boot:spring-boot-starter-webflux"
implementation "org.springframework.security:spring-security-web"
implementation "jakarta.servlet:jakarta.servlet-api:6.0.0"

// needed for MockHttpServletRequest
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import dev.iakunin.library.logging.reactive.handler.RequestQueryStringHandler;
import dev.iakunin.library.logging.reactive.wrapper.ContextWrapper;
import dev.iakunin.library.logging.reactive.wrapper.LoggerWrapper;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
Expand All @@ -21,11 +20,8 @@
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.http.server.reactive.HttpHandlerDecoratorFactory;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
import org.springframework.security.web.util.matcher.AnyRequestMatcher;
import org.springframework.security.web.util.matcher.NegatedRequestMatcher;
import org.springframework.security.web.util.matcher.OrRequestMatcher;
import org.springframework.security.web.util.matcher.RequestMatcher;
import org.springframework.web.reactive.function.server.RequestPredicate;
import org.springframework.web.reactive.function.server.RequestPredicates;

@Configuration
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.REACTIVE)
Expand Down Expand Up @@ -91,17 +87,17 @@ public HttpHandlerDecoratorFactory httpLoggingHandlerDecorator(
);
}

private RequestMatcher requestBlacklist() {
private RequestPredicate requestBlacklist() {
// no requests will be matched
final RequestPredicate noRequestsMather = __ -> false;

if (properties.getExcludePaths().isEmpty()) {
// no requests will be matched
return new NegatedRequestMatcher(AnyRequestMatcher.INSTANCE);
return noRequestsMather;
}

return new OrRequestMatcher(
properties.getExcludePaths()
.stream()
.map(AntPathRequestMatcher::new)
.collect(Collectors.toList())
);
return properties.getExcludePaths()
.stream()
.map(RequestPredicates::path)
.reduce(noRequestsMather, RequestPredicate::or);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,32 +5,32 @@
import dev.iakunin.library.logging.reactive.wrapper.BodyCaptureRequest;
import dev.iakunin.library.logging.reactive.wrapper.BodyCaptureResponse;
import dev.iakunin.library.logging.reactive.wrapper.LoggerWrapper;
import jakarta.servlet.http.HttpServletRequest;
import java.time.Duration;
import java.util.Objects;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.server.reactive.HttpHandler;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.security.web.util.matcher.RequestMatcher;
import org.springframework.mock.web.reactive.function.server.MockServerRequest;
import org.springframework.util.StopWatch;
import org.springframework.web.reactive.function.server.RequestPredicate;
import org.springframework.web.reactive.function.server.ServerRequest;
import reactor.core.publisher.Mono;

@RequiredArgsConstructor
@Slf4j
public final class HttpLoggingHandler implements HttpHandler {

private final RequestMatcher requestBlacklist;
private final RequestPredicate requestBlacklist;
private final HttpHandler decorated;
private final RequestLoggerAdapter requestLogger;
private final ResponseLoggerAdapter responseLogger;
private final LoggerWrapper loggerWrapper;

@Override
public Mono<Void> handle(ServerHttpRequest request, ServerHttpResponse response) {
if (requestBlacklist.matches(transform(request))) {
if (requestBlacklist.test(transform(request))) {
return decorated.handle(request, response);
}

Expand Down Expand Up @@ -61,10 +61,10 @@ public Mono<Void> handle(ServerHttpRequest request, ServerHttpResponse response)
}));
}

private HttpServletRequest transform(ServerHttpRequest request) {
final MockHttpServletRequest result = new MockHttpServletRequest();
result.setMethod(Objects.requireNonNull(request.getMethod()).name());
result.setServletPath(request.getURI().getPath());
return result;
private ServerRequest transform(ServerHttpRequest request) {
return MockServerRequest.builder()
.method(Objects.requireNonNull(request.getMethod()))
.uri(request.getURI())
.build();
}
}
3 changes: 1 addition & 2 deletions src/logging/logging-servlet/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ jar.enabled = true

archivesBaseName = "library-logging-servlet"

project.version = "1.0.2"
project.version = "1.0.4"

apply from: "$rootDir/gradle/publishing.gradle"

Expand All @@ -14,6 +14,5 @@ dependencies {

annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
implementation "org.springframework.boot:spring-boot-starter-web"
implementation "org.springframework.security:spring-security-web"
implementation "commons-io:commons-io:2.15.0"
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import dev.iakunin.library.logging.servlet.filter.FingerprintFilter;
import dev.iakunin.library.logging.servlet.filter.HttpLoggingFilter;
import dev.iakunin.library.logging.servlet.filter.RequestPathFilter;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
Expand All @@ -18,11 +17,8 @@
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.core.Ordered;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
import org.springframework.security.web.util.matcher.AnyRequestMatcher;
import org.springframework.security.web.util.matcher.NegatedRequestMatcher;
import org.springframework.security.web.util.matcher.OrRequestMatcher;
import org.springframework.security.web.util.matcher.RequestMatcher;
import org.springframework.web.servlet.function.RequestPredicate;
import org.springframework.web.servlet.function.RequestPredicates;

@SuppressWarnings("checkstyle:ClassDataAbstractionCoupling")
@Configuration
Expand Down Expand Up @@ -76,17 +72,17 @@ public FilterRegistrationBean<HttpLoggingFilter> httpLoggingRegistrationBean() {
return bean;
}

private RequestMatcher requestBlacklist() {
private RequestPredicate requestBlacklist() {
// no requests will be matched
final RequestPredicate noRequestsMather = __ -> false;

if (properties.getExcludePaths().isEmpty()) {
// no requests will be matched
return new NegatedRequestMatcher(AnyRequestMatcher.INSTANCE);
return noRequestsMather;
}

return new OrRequestMatcher(
properties.getExcludePaths()
.stream()
.map(AntPathRequestMatcher::new)
.collect(Collectors.toList())
);
return properties.getExcludePaths()
.stream()
.map(RequestPredicates::path)
.reduce(noRequestsMather, RequestPredicate::or);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,15 @@
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.time.Duration;
import java.util.List;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.security.web.util.matcher.RequestMatcher;
import org.springframework.util.StopWatch;
import org.springframework.util.StringUtils;
import org.springframework.web.filter.OncePerRequestFilter;
import org.springframework.web.servlet.function.RequestPredicate;
import org.springframework.web.servlet.function.ServerRequest;
import org.springframework.web.util.ContentCachingResponseWrapper;

@Slf4j
Expand All @@ -25,7 +27,7 @@ public final class HttpLoggingFilter extends OncePerRequestFilter {

private final RequestLoggerAdapter requestLogger;
private final ResponseLoggerAdapter responseLogger;
private final RequestMatcher requestBlacklist;
private final RequestPredicate requestBlacklist;

@Override
protected void doFilterInternal(
Expand All @@ -34,8 +36,7 @@ protected void doFilterInternal(
FilterChain filterChain
) throws ServletException, IOException {
final var requestWrapper = wrapRequest(request);

if (requestBlacklist.matches(requestWrapper)) {
if (requestBlacklist.test(transform(requestWrapper))) {
filterChain.doFilter(requestWrapper, response);
return;
}
Expand Down Expand Up @@ -90,6 +91,10 @@ private boolean isForm(HttpServletRequest request) {
return false;
}

private ServerRequest transform(HttpServletRequest request) {
return ServerRequest.create(request, List.of());
}

private ContentCachingResponseWrapper wrapResponse(
HttpServletResponse response,
HttpServletRequest request
Expand Down

0 comments on commit e65ba00

Please sign in to comment.