Skip to content

Commit

Permalink
improve matching request path at DelegatingRequestMatcherHeaderWriter F…
Browse files Browse the repository at this point in the history
  • Loading branch information
yoshikawaa committed Dec 28, 2018
1 parent f0402df commit dc074f6
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 1 deletion.
Expand Up @@ -27,6 +27,7 @@
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;

import org.springframework.security.web.header.writers.DelegatingRequestMatcherHeaderWriter;
import org.springframework.security.web.util.OnCommittedResponseWrapper;
import org.springframework.util.Assert;
import org.springframework.web.filter.OncePerRequestFilter;
Expand Down Expand Up @@ -87,6 +88,11 @@ static class HeaderWriterResponse extends OnCommittedResponseWrapper {
super(response);
this.request = request;
this.headerWriters = headerWriters;
for (HeaderWriter headerWriter : headerWriters) {
if (headerWriter instanceof DelegatingRequestMatcherHeaderWriter) {
((DelegatingRequestMatcherHeaderWriter) headerWriter).determineRequestMatches(request);
}
}
}

/*
Expand Down
Expand Up @@ -34,6 +34,8 @@ public final class DelegatingRequestMatcherHeaderWriter implements HeaderWriter

private final HeaderWriter delegateHeaderWriter;

private final String attributeNameRequestMatched = super.toString() + "." + "REQUEST_MATCHED";

/**
* Creates a new instance
*
Expand All @@ -50,6 +52,15 @@ public DelegatingRequestMatcherHeaderWriter(RequestMatcher requestMatcher,
this.delegateHeaderWriter = delegateHeaderWriter;
}

/**
* Determine whether or not the request matches.
*
* @param request the request
*/
public void determineRequestMatches(HttpServletRequest request) {
request.setAttribute(this.attributeNameRequestMatched, this.requestMatcher.matches(request));
}

/*
* (non-Javadoc)
*
Expand All @@ -58,7 +69,8 @@ public DelegatingRequestMatcherHeaderWriter(RequestMatcher requestMatcher,
* .http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public void writeHeaders(HttpServletRequest request, HttpServletResponse response) {
if (this.requestMatcher.matches(request)) {
Object requestMatched = request.getAttribute(this.attributeNameRequestMatched);
if (requestMatched != null && requestMatched instanceof Boolean && (Boolean) requestMatched) {
this.delegateHeaderWriter.writeHeaders(request, response);
}
}
Expand Down
Expand Up @@ -68,6 +68,7 @@ public void constructorNullDelegate() {
public void writeHeadersOnMatch() {
when(matcher.matches(request)).thenReturn(true);

headerWriter.determineRequestMatches(request);
headerWriter.writeHeaders(request, response);

verify(delegate).writeHeaders(request, response);
Expand All @@ -77,6 +78,14 @@ public void writeHeadersOnMatch() {
public void writeHeadersOnNoMatch() {
when(matcher.matches(request)).thenReturn(false);

headerWriter.determineRequestMatches(request);
headerWriter.writeHeaders(request, response);

verify(delegate, times(0)).writeHeaders(request, response);
}

@Test
public void writeHeadersWithoutMatch() {
headerWriter.writeHeaders(request, response);

verify(delegate, times(0)).writeHeaders(request, response);
Expand Down

0 comments on commit dc074f6

Please sign in to comment.