В моем проекте grails (версия 2.4.4) я использую плагин grails-security-rest.Но для нескольких API мне нужна традиционная безопасность, потому что мы еще не завершили избавление от страниц GSP.Я успешно справился со всеми сценариями, кроме одного, в котором я хочу, чтобы пользователь перенаправлял на определенный защищенный GSP по ссылке, которую я отправляю ему по электронной почте.Если пользователь уже вошел в систему, перенаправление происходит гладко, но когда я пытаюсь получить к нему доступ через вызов AJAX (после получения токена JWT), он перенаправляет обратно на исходную страницу, и в журналах я нахожу эту проблему - «Сбой»создать сеанс, поскольку ответ был принят. Невозможно сохранить SecurityContext. "
class InternalPagesController {
def springSecurityService
def index() {
if (springSecurityService.isLoggedIn()) {
redirect(controller: params.cname, action: params.aname, params: params)
} else {
model: [params: params]
}
}
}
Связанная страница gsp содержит следующее -
<script>
function login(){
var email=document.getElementById("username").value;
var password= document.getElementById("password").value;
var formData = {"email": email, "password" : password};
console.log("hello"+email);
//var url = "${createLink(controller:'login', action:'authenticationJwt')}";
$.ajax({
url: "${grailsApplication.config.grails.ServerURL}/api/login",
type: 'POST',
data: JSON.stringify(formData),
async: false,
contentType : 'application/json',
success: function(data) {
localStorage.setItem('access_token',data.access_token)
dashboard(data);
},
error: function(data) {
console.log("errordata :"+data)
}
});
}
function dashboard(data){
var url = "${createLink(controller:'controllerName', action:'actionName')}";
$.ajax({
url : url,
type : 'GET',
async: false,
contentType : 'application/json',
beforeSend : function(xhr) {
xhr.setRequestHeader("Authorization", "Bearer "
+ data.access_token);
},
success : function(data) {
//window.location=url;
},
error : function(data) {
console.log("errordata :" + data)
}
});
}
</script>
В userRequestResponse я пытаюсь отобразить другое представление, и именно здесь проблема.
class LeaveTrackerController {
@Secured(["ROLE_USER"])
def userRequestResponse(){
render (view : "/leaveTracker/tokenExpired")
}
}
Я буду благодарен за любую помощь по этому вопросу.