Аннулирование сессии тестирования в Spring Security - PullRequest
0 голосов
/ 06 ноября 2018

Я играю с Spring Security и сейчас пытаюсь получить некоторые знания о тестировании моего REST-контроллера с точки зрения безопасности.

Итак, я подготовил свой тестовый класс с:

@Autowired
private WebApplicationContext context;

private MockMvc mvc;

@Before
public void setup() {
    mvc = MockMvcBuilders
            .webAppContextSetup(context)
            .apply(springSecurity())
            .build();
}

содержит тестовые случаи в основном следующей или похожей формы:

@Test
public void handleSecuredRequest_shouldReturn200_withAdminUser() throws Exception{
    ResultActions action = mvc.perform(get("/secured").with(user("admin").roles("ADMIN")));

    int status = action.andReturn().getResponse().getStatus();
    assertTrue("expected status code = 200 ; current status code = " + status, status == 200);
}

То, чего я не мог достичь до сих пор, было вещами, касающимися сессий. В первую очередь мне было бы интересно убедиться, что сессия-недействительность выполняется правильно.

Как мне этого добиться?


EDIT:

Мне удалось найти что-то близкое к решению, сделав следующее на основе https://stackoverflow.com/a/26281932/6294605:

@Test
public void logout_shouldInvalidateSession_withLoggedInUser() throws Exception{
    ResultActions action = mvc.perform(get("/userAsJSON").with(user("user")));
    MockHttpSession session = (MockHttpSession) action.andReturn().getRequest().getSession();

    ResultActions action2 = mvc.perform(post("/logout").session(session));

    ResultActions action3 = mvc.perform(get("/userAsJSON").session(session));
    int status3 = action3.andReturn().getResponse().getStatus();

    assertTrue("expected status code = 401 ; current status code = " + status3, status3 == 401);
}

Но я не совсем доволен этим.

  1. Требуется выполнить несколько шагов, чтобы позволить мне проверить, что я хочу.
  2. В результате 1 .: он не отделен от некоторых других вещей для правильного функционирования (например, конечная точка "/ userAsJSON", возвращающая 401 для неаутентифицированных пользователей).
  3. Исходя из 2 .: требуется дополнительное внимание, чтобы убедиться, что существуют контрольные примеры, обеспечивающие соответствие формальным требованиям, предъявляемым к моему тесту.

Так что я бы хотел, чтобы вариант был менее подвержен ошибкам.

Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...