它看起來像你使用池檢查登錄狀態。您的控制器方法
@RequestMapping(value = "/is_auth")
public boolean getAuth() {
return true;
}
永遠不會返回false
。所以在這種情況下通常不需要返回值。
@ResponseStatus(value = HttpStatus.OK)
@RequestMapping(value = "/is_auth")
public void ping() {
// log ?
}
我認爲最好的解決辦法是客戶端和服務器之間的的WebSocket連接。如果再實現一個SessionListener
,你可以很容易發送登錄狀態,相應的客戶端,如果他的會話中獲取過期:
//
// pseudo code
//
@Component
public class SessionListener implements HttpSessionListener {
private static final Logger logger = LoggerFactory.getLogger(SessionListener.class);
@Autowired
private IWebsocketService websocketService; // you own service here
@Override
public void sessionCreated(HttpSessionEvent se) {
logger.debug("sessionCreated: {}", se.getSession().getId());
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
String sessionId = se.getSession().getId();
logger.debug("sessionDestroyed: {}", sessionId);
websocketService.sendLoginStatus(sessionId, false);
}
}
編輯:這是一個很好的例子,如何實現與春天和JavaScript的WebSockets:Using WebSocket to build an interactive web application
來源
2016-12-01 10:22:27
dit
感謝您的回答! @dit,我使用auth2和SSO維護服務器端的會話。但問題是我不知道如何維護前端的身份驗證狀態。你能否提供JS代碼示例。 –
@Rudziankoŭ見我的編輯。這個例子非常好。 – dit