[SPRING] 스프링 부트 1.4의 보안 테스트
SPRING스프링 부트 1.4의 보안 테스트
SecurityConfig 클래스에 정의 된 사용자 지정 보안 설정으로 @WebMvcTest를 테스트하려고합니다.
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/admin*").access("hasRole('ADMIN')").antMatchers("/**").permitAll().and().formLogin();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().withUser("user").password("password").roles("ADMIN");
}
}
테스트 클래스 :
@RunWith(SpringRunner.class)
@WebMvcTest(value = ExampleController.class)
public class ExampleControllerMockMVCTest {
@Autowired
private MockMvc mockMvc;
@Test
public void indexTest() throws Exception {
mockMvc.perform(get("/"))
.andExpect(status().isOk())
.andExpect(view().name("index"));
}
@Test
public void adminTestWithoutAuthentication() throws Exception {
mockMvc.perform(get("/admin"))
.andExpect(status().is3xxRedirection()); //login form redirect
}
@Test
@WithMockUser(username="example", password="password", roles={"ANONYMOUS"})
public void adminTestWithBadAuthentication() throws Exception {
mockMvc.perform(get("/admin"))
.andExpect(status().isForbidden());
}
@Test
@WithMockUser(username="user", password="password", roles={"ADMIN"})
public void adminTestWithAuthentication() throws Exception {
mockMvc.perform(get("/admin"))
.andExpect(status().isOk())
.andExpect(view().name("admin"))
.andExpect(model().attributeExists("name"))
.andExpect(model().attribute("name", is("user")));
}
}
Spring Boot의 기본 보안 설정을 사용하기 때문에 테스트가 실패합니다.
@SpringBootTest + @AutoConfigureMockMvc를 사용하여이 문제를 해결할 수 있지만 모든 자동 구성을 실행하지 않고 테스트하는 것은 흥미로울 것입니다.
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.MOCK)
@AutoConfigureMockMvc
public class ExampleControllerSpringBootTest {
@Autowired
private MockMvc mockMvc;
// tests
}
@WebMvcTest가 SecurityConfig 클래스에 정의 된 설정을 사용할 수있는 방법이 있습니까?
해결법
-
==============================
1.WebMvcTest는 컨트롤러 만로드 할 것이고 다른 것은로드하지 않을 것입니다. 원하는 구성 부분과 그렇지 않은 부분을 파악할 수 없습니다. 보안 설정이 기본 @SpringBootApplication에 없다면 명시 적으로 가져와야합니다. 그렇지 않으면 스프링 부트가 기본 보안 설정을 활성화합니다.
WebMvcTest는 컨트롤러 만로드 할 것이고 다른 것은로드하지 않을 것입니다. 원하는 구성 부분과 그렇지 않은 부분을 파악할 수 없습니다. 보안 설정이 기본 @SpringBootApplication에 없다면 명시 적으로 가져와야합니다. 그렇지 않으면 스프링 부트가 기본 보안 설정을 활성화합니다.
OAuth와 같은 것을 사용한다면 모의 테스트를 위해 사용하기를 원하지 않기 때문에 좋은 일입니다. @Import (SecurityConfig.class)를 테스트에 추가하면 어떻게됩니까?
from https://stackoverflow.com/questions/38675020/testing-security-in-spring-boot-1-4 by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] sec : thymeleaf 뷰에서 isAuthenticated () 및 isAnonymous ()를 true로 반환하도록 권한 부여 (0) | 2018.12.27 |
---|---|
[SPRING] 스프링 저지 잭슨 (0) | 2018.12.27 |
[SPRING] JavaConfig로 Spring IoC를 사용하여 AspectJ aspect를 설정하고 싶습니까? (0) | 2018.12.27 |
[SPRING] 항목 / 엔티티 모음이있는 Spring 캐시 (0) | 2018.12.27 |
[SPRING] 스프링 보안 4 사용자 정의 로그인 j_spring_security_check은 http 302를 반환합니다. (0) | 2018.12.27 |