복붙노트

[SPRING] 테스트 용 스프링 부트 설정 보안

SPRING

테스트 용 스프링 부트 설정 보안

내 테스트에서 보안을 올바르게 구성 할 수 없습니다. 내 웹 보안 구성 :

@Configuration
@EnableWebMvcSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/api/**").hasRole("USER")
                .and()
                .httpBasic()
        ;
    }
}

그리고 내 테스트 수업 :

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration
@ContextConfiguration(classes = {Application.class, AppConfig.class, WebMvcConfig.class, WebSecurityConfig.class})
@WebAppConfiguration
public class TestControllerTest {

    @Autowired
    private WebApplicationContext wac;

    private MockMvc mockMvc;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        this.mockMvc = webAppContextSetup(wac).dispatchOptions(true).build();
    }

    @Test
    public void getTest() throws Exception {
        mockMvc
                .perform(get("/api/test"))
                .andExpect(status().isForbidden())
        ;
    }
}

보안 레이어가 실행되지 않았 음을 의미하는 404 상태 코드가 표시되어 내 테스트 클래스에서 제대로 구성되지 않았습니다. 성공하지 않고 클래스를 @ContextConfiguration에서 @SpringApplicationConfiguration으로 전환하려고했습니다.

해결법

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

    1.코드를 다음과 같이 수정하십시오.

    코드를 다음과 같이 수정하십시오.

       @Autowired
       private FilterChainProxy filterChainProxy;
    
    
        @Before
        public void setUp() {
            MockitoAnnotations.initMocks(this);
            this.mockMvc = webAppContextSetup(wac).dispatchOptions(true).addFilters(filterChainProxy).build();
        }
    
  2. ==============================

    2.Spring Security 4.0.4에서 언급 한대로 :

    Spring Security 4.0.4에서 언급 한대로 :

    예:

    import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.*;
    
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration
    @WebAppConfiguration
    public class TestControllerTest {
    
        @Autowired
        private WebApplicationContext wac;
    
        private MockMvc mockMvc;
    
        @Before
        public void setup() {
            mockMvc = MockMvcBuilders
                    .webAppContextSetup(wac)
                    .apply(springSecurity()) //will perform all of the initial setup to integrate Spring Security with Spring MVC Test
                    .build();
        }
    
  3. from https://stackoverflow.com/questions/23335200/spring-boot-setup-security-for-testing by cc-by-sa and MIT license