@ -29,8 +29,10 @@ import org.springframework.security.config.annotation.web.builders.HttpSecurity;
@@ -29,8 +29,10 @@ import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity ;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter ;
import org.springframework.security.config.test.SpringTestRule ;
import org.springframework.security.core.Authentication ;
import org.springframework.security.core.userdetails.PasswordEncodedUser ;
import org.springframework.security.web.access.AccessDeniedHandler ;
import org.springframework.security.web.authentication.session.SessionAuthenticationStrategy ;
import org.springframework.security.web.csrf.CsrfTokenRepository ;
import org.springframework.security.web.csrf.DefaultCsrfToken ;
import org.springframework.security.web.firewall.StrictHttpFirewall ;
@ -60,14 +62,7 @@ import static org.springframework.security.test.web.servlet.request.SecurityMock
@@ -60,14 +62,7 @@ import static org.springframework.security.test.web.servlet.request.SecurityMock
import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.user ;
import static org.springframework.security.test.web.servlet.response.SecurityMockMvcResultMatchers.authenticated ;
import static org.springframework.security.test.web.servlet.response.SecurityMockMvcResultMatchers.unauthenticated ;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete ;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get ;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.head ;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.options ;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.patch ;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post ;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put ;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.request ;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.* ;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.redirectedUrl ;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status ;
@ -76,6 +71,8 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
@@ -76,6 +71,8 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
*
* @author Rob Winch
* @author Eleftheria Stein
* @author Michael Vitz
* @author Sam Simmons
* /
public class CsrfConfigurerTests {
@Rule
@ -684,6 +681,66 @@ public class CsrfConfigurerTests {
@@ -684,6 +681,66 @@ public class CsrfConfigurerTests {
}
}
@EnableWebSecurity
static class NullAuthenticationStrategy extends WebSecurityConfigurerAdapter {
@Override
protected void configure ( HttpSecurity http ) throws Exception {
// @formatter:off
http
. csrf ( )
. sessionAuthenticationStrategy ( null ) ;
// @formatter:on
}
}
@Test
public void getWhenNullAuthenticationStrategyThenException ( ) {
assertThatThrownBy ( ( ) - > this . spring . register ( NullAuthenticationStrategy . class ) . autowire ( ) )
. isInstanceOf ( BeanCreationException . class )
. hasRootCauseInstanceOf ( IllegalArgumentException . class ) ;
}
@EnableWebSecurity
static class CsrfAuthenticationStrategyConfig extends WebSecurityConfigurerAdapter {
static SessionAuthenticationStrategy STRATEGY ;
@Override
protected void configure ( HttpSecurity http ) throws Exception {
// @formatter:off
http
. formLogin ( )
. and ( )
. csrf ( )
. sessionAuthenticationStrategy ( STRATEGY ) ;
// @formatter:on
}
@Override
protected void configure ( AuthenticationManagerBuilder auth ) throws Exception {
// @formatter:off
auth
. inMemoryAuthentication ( )
. withUser ( PasswordEncodedUser . user ( ) ) ;
// @formatter:on
}
}
@Test
public void csrfAuthenticationStrategyConfiguredThenStrategyUsed ( ) throws Exception {
CsrfAuthenticationStrategyConfig . STRATEGY = mock ( SessionAuthenticationStrategy . class ) ;
this . spring . register ( CsrfAuthenticationStrategyConfig . class ) . autowire ( ) ;
this . mvc . perform ( post ( "/login" )
. with ( csrf ( ) )
. param ( "username" , "user" )
. param ( "password" , "password" ) )
. andExpect ( redirectedUrl ( "/" ) ) ;
verify ( CsrfAuthenticationStrategyConfig . STRATEGY , atLeastOnce ( ) )
. onAuthentication ( any ( Authentication . class ) , any ( HttpServletRequest . class ) , any ( HttpServletResponse . class ) ) ;
}
@RestController
static class BasicController {
@GetMapping ( "/" )