Перенаправление на страницу входа в Ajax Post Request, когда Spring Security включен для ajax URL - PullRequest
0 голосов
/ 20 июня 2019

Я реализовал Spring-Security в своем WebApp, и когда я нажимаю кнопку LIKE, он отправляет запрос ajax на СЕРВЕР

(Мой URL: http:localhost:8080/myWebApp/likes/qs/10)

моя весенняя конфигурация безопасности для этого URL -

<http>  
<!-- Admin access Only -->
<intercept-url pattern="/manage/**" access="hasAuthority('ADMIN')" /> 
<!-- FOR USER -->
<intercept-url pattern="/likes/**" access="hasAuthority('USER')" method="POST"/> 
</http>

Когда URL-адрес изменяется в браузере (в первом случае), он перенаправляет пользователя на страницу входа. (работает отлично) но в случае запроса ajax, URL-адрес ограничен для публикации на сервере, хотя он не перенаправляет на страницу входа, если пользователь не вошел в систему.

General
Request URL: http:localhost:8080/myWebApp/likes/qs/10
Request Method: POST
Status Code: 302 
Remote Address: [::1]:8080
Referrer Policy: no-referrer-when-downgrade

Resonse Header
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Content-Length: 0
Date: Thu, 20 Jun 2019 07:09:37 GMT
Expires: 0
Location: http://localhost:8080/eveprep/login
Pragma: no-cache
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block

Request Header
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: en-GB,en-US;q=0.9,en;q=0.8
Connection: keep-alive
Content-Length: 0
Cookie: JSESSIONID=54E50C4CE1E32BD2FFDA60B6AE2992B9
Host: localhost:8080
Origin: http://localhost:8080
Referer: http://localhost:8080/eveprep/show/subCategory/1/mcqs/1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.90 Safari/537.36
X-CSRF-TOKEN: 08599de2-8fb5-41c6-83dc-a4d034933a42
X-Requested-With: XMLHttpRequest

js файл

$('body').on('click','.likebtn',function(event) {
    var btn = $(this);
    var likeBtnId = btn.prop('id');
    var likeUrl = window.contextRoot+ '/likes/qs/'+ likeBtnId;                  
        $.post(likeUrl,function(data) {
            Swal.fire({
            toast: true,
            position: 'top-end',
            type: 'success',
            title: 'Unliked',
            showConfirmButton: false,
            timer: 1500
            })
        });
});

1 Ответ

0 голосов
/ 20 июня 2019

Проблема в том, вы не можете перенаправить пользователя в запросах ajax . Одним из возможных решений может быть что-то вроде этого:

  1. Установите идентификатор для вашей формы входа. Например <form id="#loginForm">
  2. При успешном обратном вызове вашего ajax-запроса проанализируйте результат, если оно содержит слово #loginForm, это означает, что пользователь не аутентифицирован, и Spring перенаправляет его на страницу входа после доступа к защищенному URL-адресу. Затем вы можете перенаправить его на страницу входа с помощью javascript window.location.

Примечание: Синтаксический анализ результата ajax в каждом запросе ajax очень сложен и требует много изменений кода. Вместо этого вы можете установить обработчик успешных событий для всех запросов ajax один раз и глобально с помощью ajaxSuccess(). С этим методом вам не нужно изменять методы вызова ajax.

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