Что я сделал не так, когда использовал Jersey Client для аутентификации веб-приложения Spring Security?

У меня есть веб-приложение, защищенное аутентификацией Spring Security Login Form. Теперь я хочу использовать Jersey Client для аутентификации на своих веб-страницах, и я думаю, что мне следует пройти через форму входа в систему, как в обычном браузере.

Мой код аутентификации клиента, как показано ниже

    Client client = ClientBuilder.newClient();
    WebTarget target = client.target("http://localhost:8080/authentication-inmem/j_spring_security_check");
    Form form = new Form();
    form.param("j_username", "car");
    form.param("j_password", "scarvarez");

    Response response =  target.request()
    .post(Entity.entity(form, MediaType.APPLICATION_FORM_URLENCODED_TYPE));
    System.out.println(response.getStatus());

Этот код всегда выдает код состояния 404. Когда я ввожу ссылку http://localhost:8080/authentication-inmem/j_spring_security_check в свой браузер или просто измените приведенный выше код на запрос GET. Обычно я мог получить HTML-код для формы входа в систему аутентификации. Следовательно, я действительно не знаю, почему этот URL-адрес не найден с помощью POST?

Надеюсь, вы могли бы показать мне, в чем я ошибаюсь, и, кроме того, то, что я делаю, является правильным способом аутентификации на моем сервере без использования браузера?


person Chiến Nghê    schedule 14.06.2015    source источник


Ответы (1)


Я нашел ответ: по умолчанию клиент Джерси автоматически перенаправляется, как только получает ответ со статусом 3xx. (в данном случае это 302). Теперь просто отключите эту функцию с помощью небольшой настройки, и я смогу получить статус 302 на своей консоли.

ClientConfig clientConfig = new ClientConfig();
clientConfig.property(ClientProperties.FOLLOW_REDIRECTS, false);
Client client = ClientBuilder.newClient(clientConfig);
person Chiến Nghê    schedule 14.06.2015