복붙노트

[SPRING] @WebMvcTest를 사용하고 사용자 정의 필터를 어떻게 추가 할 수 있습니까?

SPRING

@WebMvcTest를 사용하고 사용자 정의 필터를 어떻게 추가 할 수 있습니까?

Spring Boot 1.4는 @WebMvcTest를 추가하여 응용 프로그램의 웹 조각을 테스트하는 데 필요한 부분을 연결합니다. 이것은 환상적입니다. 그러나 맞춤 필터와 보안 코드가 연결되어 있는지 확인하여 제대로 작동하는지 확인할 수도 있습니다.

@WebMvcTest를 사용할 때 어떻게 사용자 정의 필터를 추가 할 수 있습니까?

해결법

  1. ==============================

    1.@AutoConfigureWebMvc는 현재 다음과 같은 자동 구성 클래스를 가져옵니다 (spring-boot-test-autoconfigure jar의 spring.factories 참조).

    @AutoConfigureWebMvc는 현재 다음과 같은 자동 구성 클래스를 가져옵니다 (spring-boot-test-autoconfigure jar의 spring.factories 참조).

    # AutoConfigureMockMvc auto-configuration imports
    org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc=\
    org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration,\
    org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityAutoConfiguration,\
    org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration,\
    org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration
    

    이 목록에서 MockMvcSecurityAutoConfiguration은 자동으로 보안 필터와의 통합을 제공합니다.

    추가 필터에 대한 지원을 추가해야하는 경우 자체 MockMvcBuilder 사용자 정의 프로그램을 작성할 수 있습니다 (영감을 얻으려면 MockMvc SecurityConfiguration.SecurityMockMvcBuilder 사용자 정의 프로그램을 참조하십시오).

    사용자 정의 프로그램을 중첩 된 @TestConfiguration 클래스를 사용하여 사용자 정의 프로그램을 특정 테스트에 연결하거나, 고유 한 spring.factories를 추가하고 AutoConfigureMockMvc 키를 사용하여 자동으로 모든 테스트에 추가 할 수 있습니다.

  2. ==============================

    2.@Phil Webb이 지적한 Spring Boot 옵션 외에도 Spring Framework의 일반적인 기능을 사용하여 다음과 같이 할 수있다.

    @Phil Webb이 지적한 Spring Boot 옵션 외에도 Spring Framework의 일반적인 기능을 사용하여 다음과 같이 할 수있다.

    @Autowired
    private WebApplicationContext context;
    
    @Autowired
    private FilterChainProxy springSecurityFilter;
    
    @Before
    public void setup() {
        mockMvc = MockMvcBuilders
                .webAppContextSetup(context)
                .addFilters(springSecurityFilter)
                .apply(SecurityMockMvcConfigurers.springSecurity())
                .build();
    }
    
  3. ==============================

    3.스프링 보안과 커스텀 필터로 @WebMvcTest를 사용하면 자동으로 MockMvc 인스턴스로 설정됩니다. 이 작업은 rwinch / spring-boot-sample / tree / so-38746850-webmvctest-customfilters에서 볼 수 있습니다. 특히, DemoApplicationTests는 Spring Security가 올바르게 설정되었고 사용자 정의 필터가 설정되었음을 보여줍니다.

    스프링 보안과 커스텀 필터로 @WebMvcTest를 사용하면 자동으로 MockMvc 인스턴스로 설정됩니다. 이 작업은 rwinch / spring-boot-sample / tree / so-38746850-webmvctest-customfilters에서 볼 수 있습니다. 특히, DemoApplicationTests는 Spring Security가 올바르게 설정되었고 사용자 정의 필터가 설정되었음을 보여줍니다.

    SpringBoot는 SpringBootMockMvcBuilderCustomizer.addFilters를 사용하여 모든 필터를 자동으로 추가합니다.

    MockMvcSecurityConfiguration은 Spring Security의 테스트 지원을 설정하는데 사용된다. 즉, Spring Security의 SecurityMockMvcRequestPostProcessors.testSecurityContext ()를 MockMvc 인스턴스에 추가함으로써 @MockUser 사용을 허용한다.

  4. from https://stackoverflow.com/questions/38746850/how-can-i-use-webmvctest-and-also-add-in-my-own-custom-filters by cc-by-sa and MIT license