Cómo utilizar la configuración correcta primavera de Seguridad durante una prueba MockMvc

rieckpil:

Estoy tratando de probar el acceso de uno de mi @RestControllerque está asegurado por una configuración personalizada de la primavera de Seguridad. Mi caso de uso es el siguiente: Una HTTP GETa /someEndpointestá asegurado con autentificación, sino un HTTP POSTsolicitud al mismo punto final no está asegurada. Está funcionando bien cuando arranco aplicación y test con mi frontend o cartero.

Ahora estoy tratando de escribir pruebas con MockMvcla configuración de seguridad. Ya hice a través de una gran cantidad de respuestas en stackoverflow, pero nada me ayudó.

Mi configuración de prueba tiene el siguiente aspecto:

@RunWith(SpringRunner.class)
@WebMvcTest(controllers = MyController.class)
@WebAppConfiguration
@ContextConfiguration
public class AssessmentControllerTest {

    private MockMvc mockMvc;

    @Autowired
    private WebApplicationContext webApplicationContext;

    @Before
    public void init() throws Exception {
        this.mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext)
                .alwaysDo(print())
                .apply(SecurityMockMvcConfigurers.springSecurity())
                .build();
    }

    // some test methods

}

Con esta configuración todos mis puntos finales están asegurados e incluso un HTTP POSTestá volviendo un 401lugar de 201. También He activado el registro de depuración para la seguridad y en los registros de depuración se dice que la prueba utiliza el default configure(HttpSecurity)y no puedo encontrar ninguna de mis AntMatchers en los registros:

2018-07-04 19:20:02.829 DEBUG 2237 --- [           main] s.s.c.a.w.c.WebSecurityConfigurerAdapter : Using default configure(HttpSecurity). If subclassed this will potentially override subclass configure(HttpSecurity).
2018-07-04 19:20:03.097 DEBUG 2237 --- [           main] edFilterInvocationSecurityMetadataSource : Adding web access control expression 'authenticated', for org.springframework.security.web.util.matcher.AnyRequestMatcher@1
2018-07-04 19:20:03.127 DEBUG 2237 --- [           main] o.s.s.w.a.i.FilterSecurityInterceptor    : Validated configuration attributes
2018-07-04 19:20:03.130 DEBUG 2237 --- [           main] o.s.s.w.a.i.FilterSecurityInterceptor    : Validated configuration attributes
2018-07-04 19:20:03.161  INFO 2237 --- [           main] o.s.s.web.DefaultSecurityFilterChain     : Creating filter chain: org.springframework.security.web.util.matcher.AnyRequestMatcher@1, [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@5a75ec37, org.springframework.security.web.context.SecurityContextPersistenceFilter@3f736a16, org.springframework.security.web.header.HeaderWriterFilter@529c2a9a, org.springframework.security.web.csrf.CsrfFilter@7f93dd4e, org.springframework.security.web.authentication.logout.LogoutFilter@707b1a44, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@26c89563, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@1e0a864d, org.springframework.security.web.authentication.www.BasicAuthenticationFilter@22ebccb9, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@53abfc07, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@4aa21f9d, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@2c05ff9d, org.springframework.security.web.session.SessionManagementFilter@26bbe604, org.springframework.security.web.access.ExceptionTranslationFilter@4375b013, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@a96d56c]
2018-07-04 19:20:03.236  INFO 2237 --- [           main] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring FrameworkServlet ''
2018-07-04 19:20:03.237  INFO 2237 --- [           main] o.s.t.web.servlet.TestDispatcherServlet  : FrameworkServlet '': initialization started

¿Es posible en general usar mi configuración concreta primavera de Seguridad durante una MockMvcprueba o qué tengo que arrancar todo el contexto de primavera durante la prueba con @SpringBootTest? Estoy usando (primavera de arranque 2.0.3.RELEASE con Java 1.8)

¡Gracias por adelantado!

pDer666:

Con la 2.x resorte de arranque no es posible pasar de la seguridad con una propiedad más. Tienes que escribir un SecurityConfiguration propia que tiene que ser añadido a su contexto de prueba. Esta configuración de seguridad debe permitir que ninguna solicitud sin autenticación.

@Configuration
@EnableWebSecurity
public class TestSecurityConfiguration extends WebSecurityConfigurerAdapter{
   @Override
   protected void configure(HttpSecurity http) throws Exception {
   http.csrf().disable().authorizeRequests().anyRequest().permitAll();
   }

   @Override
   public void configure(WebSecurity web) throws Exception{
     web.debug(true);
   }
}

prueba de la anotación de la clase:

@ContextConfiguration(classes = { ..., TestSecurityConfiguration.class })
public class MyTests {...

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=205678&siteId=1
Recomendado
Clasificación