Spring boot security не перенаправляет после истечения сеанса

Я использовал пружинный ботинок, с пружинной безопасностью и Ext Js в качестве внешнего интерфейса. Я добавил этот кусок кода в качестве конфигурации для весенней безопасности. Это означает, что по истечении сеанса пользователь будет перенаправлен на указанный URL-адрес, верно?

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.cors().and()
            .authorizeRequests().antMatchers("/", "/login/**").permitAll().and()
            .authorizeRequests()
            .anyRequest().authenticated()
            .and()
            .formLogin()
            .loginPage("/login")
            .loginProcessingUrl("/userAuth")
            .permitAll()
            .and()
            .logout()
            .permitAll()
            .and()
            .authorizeRequests()
            .antMatchers(HttpMethod.POST, "/**").permitAll();

            http.csrf().disable();
            http.headers().frameOptions().disable();

            http.sessionManagement().maximumSessions(1).expiredUrl("/login?logout");
}

Каждый раз, когда мой веб-интерфейс отправляет ajax-запрос в spring, и пользователь теряет сеанс, Spring, как и следовало ожидать, превращает запрос в запрос get для / login? Logout, но страница не перенаправляется. Все, что я вижу, - это страница входа в контент ответа на запрос, без какого-либо влияния на страницу, которую видит пользователь.

Почему это происходит? Я пропускаю какую-либо конфигурацию или реализацию здесь?

РЕДАКТИРОВАТЬ: Вот как выглядит мой Ext Js для запроса AJAX:

onAuthCheck: function (users) {

    var result = Ext.Ajax.request({
        url: '/Queue/requests/loginCheck',
        method: 'POST',
        async: false,
        params: {
            usersInfo: Ext.encode(users)
        },
        success: function (conn, response, options, eOpts) {
            console.log(response)
            console.log(conn.status);
            if (conn.status === 401 || conn.status === 302) {
                location.href='/login?logout'
           }
        },
        failure: function (conn, response, options, eOpts) {
            console.log(response)
            console.log(conn.status)
            if (conn.status === 401 || conn.status === 302) {
                location.href='/login?logout'
           }
        }
    })
    return (Ext.JSON.decode(result.responseText, true).success);
},

EDIT2: Вот как выглядит мой запрос: у него есть запрос со статусом 302, и я все еще получаю статус 200 в ответе AJAX на код JS.

введите описание изображения здесь

Всего 1 ответ


Краткий и простой ответ:

Поскольку вы отправляете свой запрос через AJAX, Ответ не «влияет» на вашу текущую загруженную страницу.

Чтобы быть более точным:

Большинство браузеров (все, что я знаю) только перенаправляют (соблюдайте заголовок местоположения), если в заголовке ответа обнаружен HTTP-код перенаправления (301, 302, 303). Технически, если бы Spring отправлял HTTP-код состояния 302 вместе с URL-адресом для аутентификации, браузер изменил бы местоположение.

Насколько я знаю, Spring отправляет 302, если это GET-запрос

Простое решение:

Это один из способов использования Javascript и JQuery: проверьте результат вашего ответа ajax. (Это просто пример, чтобы дать вам направление, будет больше решений.

    $.ajax({
        type: 'POST',
        url: '/url',
        success: function (result, status) {
            if (result.status === 401) {
                 location.href='/login?logout'
            }
        }
    });

Есть идеи?

10000