Так что в основном я делаю некоторые модульные тесты на моем контроллере покоя, до того, как использовать Spring Security, все работало гладко, после добавления его и установки безопасности Spring для моего макета mvc, он всегда возвращает 302 и ничего больше, после Работая с моим кодом и браузером, я обнаружил, что после входа в систему, я действительно получаю код 302, который соответствует назначению из-за перенаправления, кажется, что loginProcessingUrl
в моей конфигурации вызывает это:
Моя весенняя конфигурация безопасности:
@Override
protected void configure(HttpSecurity http) throws Exception
{
http.authorizeRequests()
.anyRequest()
.authenticated()
.and()
.formLogin()
.loginPage("/showMyLoginPage")
.loginProcessingUrl("/authenticateTheUser")
.permitAll()
.and()
.logout()
.logoutSuccessUrl("/")
.logoutUrl("/logoutUser")
.and()
.csrf()
.disable();
}
Метод REST, который я тестирую:
@GetMapping(path = "/list/getProducts")
public String getProducts()
{
List<Product> products = productService.getProducts();
return gson.toJson(products);
}
И, наконец, мой тест:
@RunWith(SpringRunner.class)
@ContextConfiguration(locations = "file:src/test/java/resources/ProductCRUD-servlet.xml")
@WebAppConfiguration
public class ProductControllerTest
{
@Autowired
WebApplicationContext context;
@InjectMocks
private ProductRestController productRestController;
@Mock
private ProductService productService;
private MockMvc mockMvc;
@Before
public void setup()
{
MockitoAnnotations.initMocks(this);
mockMvc = MockMvcBuilders
.webAppContextSetup(context)
.apply(springSecurity())
.build();
}
@Test
public void getAllProductsTest() throws Exception
{
List<Product> products = new ArrayList<>();
products.add(new Product("4532", 123, "Product test", "test"));
Mockito.when(productService.getProducts())
.thenReturn(products);
mockMvc.perform(MockMvcRequestBuilders
.get("/product/list/getProducts"))
.andExpect(status().isOk)
.andExpect(content().string(containsString("\"productId\":\"4534\"")));
}
Итак, что происходит , хотя мой веб-сайт работает и я получаю json, процесс входа в систему как-то портит мой тест.
Даже если я установите мой тестовый код состояния на 302 вместо 200, он ничего не возвращает.
Expected :a string containing "\"productId\":\"4534\""
Actual :""
TLDR: при тестировании моего REST API, который защищен весенней безопасностью, я не могу достичь API из тестов.