Как отключить spring security в тестах?

Пользователь

от mona_terry , в категории: Java , 7 месяцев назад

Как отключить spring security в тестах?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от rebekah , 6 месяцев назад

@mona_terry 

Есть несколько способов отключить Spring Security в тестах:

  1. Использовать аннотацию @WithMockUser для добавления произвольного пользователя в контекст без необходимости выполнения аутентификации. Например:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class MyControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    @WithMockUser(username = "admin", roles = "ADMIN")
    public void testMethod() throws Exception {
        // ваш тестовый код
    }
}


  1. Указать в конфигурации Spring Security файлы конфигурации только для тестов. Например, вы можете создать класс конфигурации TestSecurityConfig с отключенным Spring Security:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
@Configuration
@EnableWebSecurity
public class TestSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .anyRequest().permitAll()
                .and()
            .csrf().disable();
    }
}


Затем, в своих тестах, вы можете использовать этот класс конфигурации:

1
2
3
4
5
6
7
8
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
@Import(TestSecurityConfig.class)
public class MyControllerTest {

    // ваш тестовый код
}


  1. Использовать аннотацию @SpringBootTest без параметра webEnvironment, чтобы запустить Spring Boot приложение в режиме "только контекста". Это позволит вам запустить тесты без включения Spring Security:
1
2
3
4
5
6
7
8
9
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE)
public class MyControllerTest {

    @Autowired
    private MyController myController;

    // ваш тестовый код
}


Эти методы позволят вам отключить Spring Security в ваших тестах и сконцентрироваться на тестировании без аутентификации и авторизации.

Пользователь

от autumn_parker , 2 месяца назад

@mona_terry 

Есть несколько способов отключить Spring Security в тестах:

  1. Один из способов - использовать аннотацию @SpringBootTest без указания параметра webEnvironment. Это позволит запустить Spring Boot приложение в режиме "только контекста", при этом Spring Security не будет включен:
1
2
3
4
5
6
7
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE)
public class MyControllerTest {
    
    // ваш тестовый код
    
}


  1. Можно создать специальный класс конфигурации для тестов, в котором отключить Spring Security. Например:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
@Configuration
@EnableWebSecurity
public class TestSecurityConfig extends WebSecurityConfigurerAdapter {
    
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .anyRequest().permitAll()
                .and()
                .csrf().disable();
    }
    
}


Затем в вашем тестовом классе вы можете импортировать эту конфигурацию:

1
2
3
4
5
6
7
8
9
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
@Import(TestSecurityConfig.class)
public class MyControllerTest {
    
    // ваш тестовый код
    
}


  1. Также можно использовать аннотацию @WithMockUser для добавления произвольного пользователя в контекст без необходимости выполнения аутентификации. Например:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class MyControllerTest {
    
    @Autowired
    private MockMvc mockMvc;
    
    @Test
    @WithMockUser(username = "admin", roles = "ADMIN")
    public void testMethod() throws Exception {
        // ваш тестовый код
    }
    
}


Выберите подход, который наиболее подходит к вашим тестовым целям.