вызов jquery ajax и перенаправление j_security - PullRequest
3 голосов
/ 27 января 2011

Использование Jquery (последняя версия), IBM WebSphere 6.1 Server, Java JDK 1.5

Немного рассол для вызовов AJAX. Все мои вызовы AJAX относятся к URL-адресам, которые являются частью ограничения безопасности моего web.xml, которое требует аутентификации. Аутентификация - это стандартная форма j_security, поэтому при каждом запросе к защищенному / защищенному URL-адресу контейнер (WebSphere) будет перехватывать этот вызов и проверять, хороша ли аутентификация, а если аутентификация плохая, она автоматически перенаправляет на страницу входа. Довольно простой / стандартный и ожидаемый правильный, я думаю.

Посмотрите на следующий код. Независимо от состояния аутентификации клиента (аутентифицировано, не аутентифицировано, время ожидания истекло), вызов GET (или сообщение, не имеет значения) на этот URL ВСЕГДА возвращает 200. Так что на самом деле не существует простого способа выяснить, были ли мы перенаправлены или нет, если мы не оцениваем данные, которые возвращает сервер.

Возможно, я что-то упустил? Это кажется действительно запутанным. Единственный надежный способ узнать, перенаправлены ли мы в j_security, - это взять данные, возвращаемые с сервера, и выполнить поиск в домене для поля j_password. Но это кажется действительно неэффективным, так как это то, что я должен сделать для каждого AJAX-вызова в моем приложении. Некоторые из наших вызовов AJAX относятся к URL-адресам, которые возвращают JSON, а некоторые возвращают HTML.

    $.ajax({
        type: 'GET',
        url: '<c:url value="/secure/supersecretthingy.html"/>',
        dataType: 'html',
        data:{
            requestDate: requestDate
        },
        beforeSend: function(request) {
        },
        complete: function(request) {
        },           
        success: function(data, textStatus, response) {
            var ll = $('<div id="#wee" class=""></div>').html(data).find("#j_password").length;
            //console.log(ll);
            $("#wee").remove();
            if ( ll != 0) {
                //console.log('we timed out says websphere!');
                window.location = '<c:url value="${GLOBAL_AJAX_TIMEOUT_PAGE}" />';
            } else {           
                //console.log("not timed out");
                dialogDiv.html(data);
            }   
          },
          error: function(xhr, textStatus, errorThrown) {   
              //console.log(errorThrown);
          }
    });   

1 Ответ

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