很抱歉,如果我的问题在该论坛上重复了其他一些可用的问题,并且将您重定向到正确的链接,我将不胜感激。
我编写Spring MVC应用程序,并且在前端,我使用基于Websocket的Stomp协议(SockJS)具有动态更新页面的功能。 我使用Spring安全性来使用户具有授权能力。
当我在浏览器中有一个页面时,一切正常-我尝试进入我的页面,服务器将我重定向到登录页面,输入登录名和密码, 按Enter键,服务器将我重定向到所需页面。 之后,我可以按页面上的按钮,它们运行javascript函数,这些函数连接到服务器,发送JSON请求,接收响应并 根据收到的信息更新用户界面。
但是我正在尝试另一种情况:
您能否解释一下如何避免注销事件以避免这种情况(我说过两个打开的窗口)。
我考虑使用cookie,以便在向服务器进行查询之前,我可以在其中存储有关我的授权的信息,并将其存储到所有页面中,如果不存在授权cookie,那么我必须检查该cookie,我会自动重定向到登录页面。
但是页面可能存在另一种理解页面需要注销的方式。
var stompClient = null;
var sock = null;
var MessageTypeEnum = {"NONE":0, "CARD_REQUEST":1};
var StateEnum = {"ST_INIT":0,
"ST_CARD_REQ_SENT":1,
"ST_CARD_REQ_OK":2,
"ST_ERROR":3};
var state = StateEnum.ST_INIT;
function cardProcess(messageType) {
sock = new SockJS('/page-websocket');
stompClient = Stomp.over(sock);
stompClient.connect({}, function (frame) {
stompClient.subscribe('/topic/card', function (response) {
if(messageType === MessageTypeEnum.CARD_REQUEST) {
var errors = JSON.parse(response.body).errors;
if(errors === 'none') {
state = StateEnum.ST_CARD_REQ_OK;
} else {
state = StateEnum.ST_ERROR;
}
responseWaitingStop();
cardDisconnect();
};
});
if(messageType === MessageTypeEnum.CARD_REQUEST) {
stompClient.send("/app/card", {}, JSON.stringify({
'packetType': 'CardRequest',
'cardNumber': $("#cardNumberInp").val()}));
state = StateEnum.ST_CARD_REQ_SENT;
};
}, function(error) {
console.log('StompClient: ' + error);
});
}
function cardDisconnect() {
if (stompClient !== null) {
if(stompClient)
stompClient.disconnect(function() {
sock.close();
});
}
console.log("Server disconnected");
}
function cardRequest() {
cardProcess(MessageTypeEnum.CARD_REQUEST);
responseWaitStart(SERVER_QUERY_TIME);
}
$(document).ready(function () {
state = StateEnum.ST_INIT;
$( "#cardRequestButton" ).click(function() {
if(checkLogged() === true) {
cardRequest();
}
});
});