Skip to content

Commit 1f74ac8

Browse files
author
Rob Winch
committed
Fix Spring IO Tests
1 parent 350b48e commit 1f74ac8

File tree

5 files changed

+41
-16
lines changed

5 files changed

+41
-16
lines changed

config/src/test/groovy/org/springframework/security/config/annotation/web/configurers/FormLoginConfigurerTests.groovy

+2-6
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,8 @@ class FormLoginConfigurerTests extends BaseSpringSpec {
6868
filterChains[1].requestMatcher instanceof AnyRequestMatcher
6969
filterChains[1].filters.collect { it.class.name.contains('$') ? it.class.superclass : it.class } ==
7070
[WebAsyncManagerIntegrationFilter, SecurityContextPersistenceFilter, HeaderWriterFilter, CsrfFilter, LogoutFilter, UsernamePasswordAuthenticationFilter,
71-
RequestCacheAwareFilter, SecurityContextHolderAwareRequestFilter,
72-
AnonymousAuthenticationFilter, SessionManagementFilter, ExceptionTranslationFilter, FilterSecurityInterceptor ]
71+
RequestCacheAwareFilter, SecurityContextHolderAwareRequestFilter,
72+
AnonymousAuthenticationFilter, SessionManagementFilter, ExceptionTranslationFilter, FilterSecurityInterceptor ]
7373

7474
and: "UsernamePasswordAuthentictionFilter is configured correctly"
7575
UsernamePasswordAuthenticationFilter authFilter = findFilter(UsernamePasswordAuthenticationFilter,1)
@@ -80,10 +80,6 @@ class FormLoginConfigurerTests extends BaseSpringSpec {
8080
authFilter.requiresAuthentication(new MockHttpServletRequest(servletPath : "/login", method: "POST"), new MockHttpServletResponse())
8181
!authFilter.requiresAuthentication(new MockHttpServletRequest(servletPath : "/login", method: "GET"), new MockHttpServletResponse())
8282

83-
and: "SessionFixationProtectionStrategy is configured correctly"
84-
SessionFixationProtectionStrategy sessionStrategy = ReflectionTestUtils.getField(authFilter,"sessionStrategy").delegateStrategies.find { SessionFixationProtectionStrategy }
85-
sessionStrategy.migrateSessionAttributes
86-
8783
and: "Exception handling is configured correctly"
8884
AuthenticationEntryPoint authEntryPoint = filterChains[1].filters.find { it instanceof ExceptionTranslationFilter}.authenticationEntryPoint
8985
MockHttpServletResponse response = new MockHttpServletResponse()

config/src/test/groovy/org/springframework/security/config/annotation/web/configurers/NamespaceSessionManagementTests.groovy

+18-4
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ import org.springframework.security.config.annotation.web.builders.HttpSecurity
2424
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity
2525
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter
2626
import org.springframework.security.core.session.SessionRegistry
27+
import org.springframework.security.web.authentication.session.AbstractSessionFixationProtectionStrategy;
28+
import org.springframework.security.web.authentication.session.ChangeSessionIdAuthenticationStrategy;
2729
import org.springframework.security.web.authentication.session.NullAuthenticatedSessionStrategy
2830
import org.springframework.security.web.authentication.session.SessionAuthenticationStrategy
2931
import org.springframework.security.web.authentication.session.SessionFixationProtectionEvent
@@ -41,7 +43,7 @@ class NamespaceSessionManagementTests extends BaseSpringSpec {
4143
when:
4244
loadConfig(SessionManagementConfig)
4345
then:
44-
findSessionAuthenticationStrategy(SessionFixationProtectionStrategy)
46+
findSessionAuthenticationStrategy(AbstractSessionFixationProtectionStrategy)
4547
}
4648

4749
@EnableWebSecurity
@@ -124,7 +126,11 @@ class NamespaceSessionManagementTests extends BaseSpringSpec {
124126
when:
125127
loadConfig(SFPMigrateSessionManagementConfig)
126128
then:
127-
findSessionAuthenticationStrategy(SessionFixationProtectionStrategy).migrateSessionAttributes
129+
if(isChangeSession()) {
130+
findSessionAuthenticationStrategy(ChangeSessionIdAuthenticationStrategy)
131+
} else {
132+
findSessionAuthenticationStrategy(SessionFixationProtectionStrategy).migrateSessionAttributes
133+
}
128134
}
129135

130136
@EnableWebSecurity
@@ -140,7 +146,7 @@ class NamespaceSessionManagementTests extends BaseSpringSpec {
140146
setup:
141147
loadConfig(SFPPostProcessedConfig)
142148
when:
143-
findSessionAuthenticationStrategy(SessionFixationProtectionStrategy).onSessionChange("id", new MockHttpSession(), new TestingAuthenticationToken("u","p","ROLE_USER"))
149+
findSessionAuthenticationStrategy(AbstractSessionFixationProtectionStrategy).onSessionChange("id", new MockHttpSession(), new TestingAuthenticationToken("u","p","ROLE_USER"))
144150
then:
145151
context.getBean(MockEventListener).events
146152
}
@@ -167,7 +173,7 @@ class NamespaceSessionManagementTests extends BaseSpringSpec {
167173
}
168174

169175
def findSessionAuthenticationStrategy(def c) {
170-
findFilter(SessionManagementFilter).sessionAuthenticationStrategy.delegateStrategies.find { it.class.isAssignableFrom(c) }
176+
findFilter(SessionManagementFilter).sessionAuthenticationStrategy.delegateStrategies.find { c.isAssignableFrom(it.class) }
171177
}
172178

173179
@EnableWebSecurity
@@ -189,4 +195,12 @@ class NamespaceSessionManagementTests extends BaseSpringSpec {
189195
}
190196

191197
}
198+
199+
boolean isChangeSession() {
200+
try {
201+
new ChangeSessionIdAuthenticationStrategy()
202+
return true
203+
} catch(Exception e) {}
204+
return false
205+
}
192206
}

config/src/test/groovy/org/springframework/security/config/annotation/web/configurers/SessionManagementConfigurerTests.groovy

+4-6
Original file line numberDiff line numberDiff line change
@@ -17,30 +17,28 @@ package org.springframework.security.config.annotation.web.configurers
1717

1818
import javax.servlet.http.HttpServletResponse
1919

20-
import org.springframework.context.annotation.Configuration
2120
import org.springframework.mock.web.MockFilterChain
2221
import org.springframework.mock.web.MockHttpServletRequest
2322
import org.springframework.mock.web.MockHttpServletResponse
24-
import org.springframework.security.authentication.AuthenticationTrustResolver;
23+
import org.springframework.security.authentication.AuthenticationTrustResolver
2524
import org.springframework.security.config.annotation.AnyObjectPostProcessor
2625
import org.springframework.security.config.annotation.BaseSpringSpec
2726
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder
2827
import org.springframework.security.config.annotation.web.builders.HttpSecurity
2928
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity
3029
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter
3130
import org.springframework.security.config.http.SessionCreationPolicy
32-
import org.springframework.security.core.session.SessionDestroyedEvent
3331
import org.springframework.security.web.access.ExceptionTranslationFilter
32+
import org.springframework.security.web.authentication.session.AbstractSessionFixationProtectionStrategy
3433
import org.springframework.security.web.authentication.session.CompositeSessionAuthenticationStrategy
3534
import org.springframework.security.web.authentication.session.ConcurrentSessionControlAuthenticationStrategy
3635
import org.springframework.security.web.authentication.session.RegisterSessionAuthenticationStrategy
37-
import org.springframework.security.web.authentication.session.SessionFixationProtectionStrategy;
3836
import org.springframework.security.web.context.NullSecurityContextRepository
3937
import org.springframework.security.web.context.SecurityContextPersistenceFilter
4038
import org.springframework.security.web.context.SecurityContextRepository
4139
import org.springframework.security.web.savedrequest.RequestCache
4240
import org.springframework.security.web.session.ConcurrentSessionFilter
43-
import org.springframework.security.web.session.HttpSessionDestroyedEvent;
41+
import org.springframework.security.web.session.HttpSessionDestroyedEvent
4442
import org.springframework.security.web.session.SessionManagementFilter
4543

4644
/**
@@ -229,7 +227,7 @@ class SessionManagementConfigurerTests extends BaseSpringSpec {
229227
and: "RegisterSessionAuthenticationStrategy is registered with ObjectPostProcessor"
230228
1 * opp.postProcess(_ as RegisterSessionAuthenticationStrategy) >> {RegisterSessionAuthenticationStrategy o -> o}
231229
and: "SessionFixationProtectionStrategy is registered with ObjectPostProcessor"
232-
1 * opp.postProcess(_ as SessionFixationProtectionStrategy) >> {SessionFixationProtectionStrategy o -> o}
230+
1 * opp.postProcess(_ as AbstractSessionFixationProtectionStrategy) >> {AbstractSessionFixationProtectionStrategy o -> o}
233231
}
234232

235233
def "use sharedObject trustResolver"() {

web/src/main/java/org/springframework/security/web/context/SaveContextOnUpdateOrErrorResponseWrapper.java

+11
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import java.util.Locale;
1818

1919
import javax.servlet.ServletOutputStream;
20+
import javax.servlet.WriteListener;
2021
import javax.servlet.http.HttpServletResponse;
2122
import javax.servlet.http.HttpServletResponseWrapper;
2223

@@ -469,5 +470,15 @@ public void write(byte[] b, int off, int len) throws IOException {
469470
public String toString() {
470471
return getClass().getName() + "[delegate=" + delegate.toString() + "]";
471472
}
473+
474+
@Override
475+
public boolean isReady() {
476+
return delegate.isReady();
477+
}
478+
479+
@Override
480+
public void setWriteListener(WriteListener writeListener) {
481+
delegate.setWriteListener(writeListener);
482+
}
472483
}
473484
}

web/src/test/java/org/springframework/security/web/authentication/session/ChangeSessionIdAuthenticationStrategyTests.java

+6
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,12 @@ public class ChangeSessionIdAuthenticationStrategyTests {
4242

4343
@Test(expected = IllegalStateException.class)
4444
public void constructChangeIdMethodNotFound() {
45+
spy(ReflectionUtils.class);
46+
MockHttpServletRequest request = new MockHttpServletRequest();
47+
request.getSession();
48+
when(ReflectionUtils.findMethod(HttpServletRequest.class, "changeSessionId"))
49+
.thenReturn(null);
50+
4551
new ChangeSessionIdAuthenticationStrategy();
4652
}
4753

0 commit comments

Comments
 (0)