tutorial mvc example spring-mvc spring-security spring-test-mvc

example - Pruebas de integración Spring MVC con Spring Security



spring security spring boot (2)

Añadir en pom.xml

<repository> <id>spring-snaspho</id> <url>http://repo.springsource.org/libs-milestone/</url> </repository> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-test</artifactId> <version>4.0.0.M1</version> </dependency>

y use org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors para la solicitud de autorización. Consulte el uso de muestra en https://github.com/rwinch/spring-security-test-blog ( https://jira.spring.io/browse/SEC-2592 )

Estoy tratando de probar mi página de inicio de sesión usando mvc-test. Estaba trabajando bastante bien antes de agregar seguridad de primavera.

Mi código es:

mockMvc.perform( post("j_spring_security_check") .param(LOGIN_FORM_USERNAME_FIELD, testUsernameValue) .param(LOGIN_FORM_PASSWORD_FIELD, testPasswordValue)) .andDo(print()) .andExpect(status().isOk()) .andExpect(model().attribute(LOGIN_PAGE_STATUS_VALUE, LOGIN_PAGE_STATUS_FALSE_INDICATOR));

La clase de prueba tiene anotaciones correctas agregadas:

@RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @ContextConfiguration(locations = {"classpath:security-context.xml", "classpath:applicationContext.xml", "classpath:test-contexts/test-context.xml" })

Mi filtro está definido (en web.xml):

<filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

Cuando intento agregar web.xml en @ContextConfiguration falla, cuando lo elimino, obtengo una excepción:

java.lang.AssertionError: Status expected:<200> but was:<405>

¿Hay alguna forma de agregar DelegatingProxyFilter para probar el contexto con la configuración definida en mi security-context.xml para que funcione? Intenté algunos tutoriales con la inyección de FilterProxyChain, pero no está funcionando en mi caso.

¿Puede alguien ayudarme con eso? Gracias por adelantado


ACTUALIZACIÓN : Spring Security 4+ proporciona integración inmediata con MockMvc . Para poder usarlo, asegúrese de usar apply(springSecurity()) como se muestra a continuación:

import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.*; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration @WebAppConfiguration public class MockMvcSecurityTests { @Autowired private WebApplicationContext context; private MockMvc mvc; @Before public void setup() { mvc = MockMvcBuilders .webAppContextSetup(context) .apply(springSecurity()) .build(); } ... }

Respuesta original

No estoy seguro de qué quiere decir con "Cuando intento agregar web.xml en @ContextConfiguration falla", sin embargo, puede usar Spring Test MVC para validar Spring Security. Hay un muy buen ejemplo descrito en el proyecto spring-test-mvc .

El esquema básico se vería algo así:

@RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @ContextConfiguration(locations = {"classpath:security-context.xml", "classpath:applicationContext.xml", "classpath:test-contexts/test-context.xml" }) public class MyTests { @Autowired private FilterChainProxy springSecurityFilterChain; @Autowired private WebApplicationContext wac; private MockMvc mockMvc; @Before public void setup() { this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac) .addFilters(this.springSecurityFilterChain).build(); } }

La idea es que @Autowire el FilterChainProxy (a lo que delegateProxyFilter delegate) e MockMvc a MockMvc que use el FilterChainProxy .

NOTA spring-test-mvc está integrado en spring-test-3.2 + y un proyecto separado para Spring 3.1.x, por lo que puede usar el ejemplo de forma bastante intercambiable (spring-test-mvc no tiene soporte para @WebAppConfiguration y debe usarlo WebContextLoader en WebContextLoader lugar).