|
@@ -15,48 +15,28 @@
|
|
*/
|
|
*/
|
|
package org.springframework.security.test.web.servlet.request;
|
|
package org.springframework.security.test.web.servlet.request;
|
|
|
|
|
|
-import static org.mockito.Matchers.any;
|
|
|
|
-import static org.mockito.Matchers.eq;
|
|
|
|
-import static org.mockito.Mockito.verify;
|
|
|
|
import static org.fest.assertions.Assertions.assertThat;
|
|
import static org.fest.assertions.Assertions.assertThat;
|
|
-import static org.powermock.api.mockito.PowerMockito.spy;
|
|
|
|
-import static org.powermock.api.mockito.PowerMockito.when;
|
|
|
|
-import static org.powermock.api.mockito.PowerMockito.doReturn;
|
|
|
|
import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestBuilders.formLogin;
|
|
import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestBuilders.formLogin;
|
|
|
|
|
|
-import javax.servlet.http.HttpServletRequest;
|
|
|
|
-import javax.servlet.http.HttpServletResponse;
|
|
|
|
-
|
|
|
|
import org.junit.Before;
|
|
import org.junit.Before;
|
|
import org.junit.Test;
|
|
import org.junit.Test;
|
|
-import org.junit.runner.RunWith;
|
|
|
|
-import org.mockito.Mock;
|
|
|
|
-import org.powermock.core.classloader.annotations.PrepareForTest;
|
|
|
|
-import org.powermock.modules.junit4.PowerMockRunner;
|
|
|
|
import org.springframework.mock.web.MockHttpServletRequest;
|
|
import org.springframework.mock.web.MockHttpServletRequest;
|
|
import org.springframework.mock.web.MockServletContext;
|
|
import org.springframework.mock.web.MockServletContext;
|
|
-import org.springframework.security.test.web.support.WebTestUtils;
|
|
|
|
-import org.springframework.security.web.csrf.CsrfTokenRepository;
|
|
|
|
-import org.springframework.security.web.csrf.DefaultCsrfToken;
|
|
|
|
|
|
+import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.CsrfRequestPostProcessor;
|
|
|
|
+import org.springframework.security.web.csrf.CsrfToken;
|
|
|
|
|
|
-@RunWith(PowerMockRunner.class)
|
|
|
|
-@PrepareForTest({ WebTestUtils.class, SecurityMockMvcRequestBuildersFormLoginTests.class })
|
|
|
|
public class SecurityMockMvcRequestBuildersFormLoginTests {
|
|
public class SecurityMockMvcRequestBuildersFormLoginTests {
|
|
- @Mock
|
|
|
|
- private CsrfTokenRepository repository;
|
|
|
|
- private DefaultCsrfToken token;
|
|
|
|
private MockServletContext servletContext;
|
|
private MockServletContext servletContext;
|
|
|
|
|
|
@Before
|
|
@Before
|
|
public void setup() throws Exception {
|
|
public void setup() throws Exception {
|
|
- token = new DefaultCsrfToken("header", "param", "token");
|
|
|
|
servletContext = new MockServletContext();
|
|
servletContext = new MockServletContext();
|
|
- mockWebTestUtils();
|
|
|
|
}
|
|
}
|
|
|
|
|
|
@Test
|
|
@Test
|
|
public void defaults() throws Exception {
|
|
public void defaults() throws Exception {
|
|
MockHttpServletRequest request = formLogin().buildRequest(servletContext);
|
|
MockHttpServletRequest request = formLogin().buildRequest(servletContext);
|
|
|
|
+ CsrfToken token = (CsrfToken) request.getAttribute(CsrfRequestPostProcessor.TestCsrfTokenRepository.ATTR_NAME);
|
|
|
|
|
|
assertThat(request.getParameter("username")).isEqualTo("user");
|
|
assertThat(request.getParameter("username")).isEqualTo("user");
|
|
assertThat(request.getParameter("password")).isEqualTo("password");
|
|
assertThat(request.getParameter("password")).isEqualTo("password");
|
|
@@ -64,8 +44,7 @@ public class SecurityMockMvcRequestBuildersFormLoginTests {
|
|
assertThat(request.getParameter(token.getParameterName())).isEqualTo(
|
|
assertThat(request.getParameter(token.getParameterName())).isEqualTo(
|
|
token.getToken());
|
|
token.getToken());
|
|
assertThat(request.getRequestURI()).isEqualTo("/login");
|
|
assertThat(request.getRequestURI()).isEqualTo("/login");
|
|
- verify(repository).saveToken(eq(token), any(HttpServletRequest.class),
|
|
|
|
- any(HttpServletResponse.class));
|
|
|
|
|
|
+ assertThat(request.getParameter("_csrf")).isNotNull();
|
|
}
|
|
}
|
|
|
|
|
|
@Test
|
|
@Test
|
|
@@ -73,20 +52,13 @@ public class SecurityMockMvcRequestBuildersFormLoginTests {
|
|
MockHttpServletRequest request = formLogin("/login").user("username", "admin")
|
|
MockHttpServletRequest request = formLogin("/login").user("username", "admin")
|
|
.password("password", "secret").buildRequest(servletContext);
|
|
.password("password", "secret").buildRequest(servletContext);
|
|
|
|
|
|
|
|
+ CsrfToken token = (CsrfToken) request.getAttribute(CsrfRequestPostProcessor.TestCsrfTokenRepository.ATTR_NAME);
|
|
|
|
+
|
|
assertThat(request.getParameter("username")).isEqualTo("admin");
|
|
assertThat(request.getParameter("username")).isEqualTo("admin");
|
|
assertThat(request.getParameter("password")).isEqualTo("secret");
|
|
assertThat(request.getParameter("password")).isEqualTo("secret");
|
|
assertThat(request.getMethod()).isEqualTo("POST");
|
|
assertThat(request.getMethod()).isEqualTo("POST");
|
|
assertThat(request.getParameter(token.getParameterName())).isEqualTo(
|
|
assertThat(request.getParameter(token.getParameterName())).isEqualTo(
|
|
token.getToken());
|
|
token.getToken());
|
|
assertThat(request.getRequestURI()).isEqualTo("/login");
|
|
assertThat(request.getRequestURI()).isEqualTo("/login");
|
|
- verify(repository).saveToken(eq(token), any(HttpServletRequest.class),
|
|
|
|
- any(HttpServletResponse.class));
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private void mockWebTestUtils() throws Exception {
|
|
|
|
- spy(WebTestUtils.class);
|
|
|
|
- doReturn(repository).when(WebTestUtils.class, "getCsrfTokenRepository",
|
|
|
|
- any(HttpServletRequest.class));
|
|
|
|
- when(repository.generateToken(any(HttpServletRequest.class))).thenReturn(token);
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|