Я думаю, что когда пользователь открывает сессионное веб-приложение, укажите некоторую активную вкладку идентификатора браузера для объекта окна, например $window.name = "cliendId"
и приложение Spring, когда пользователь входит в систему, отправляет этот идентификатор окна через Интернет и обрабатывает с помощью пружины. security
public class CustomWebAuthenticationDetails extends WebAuthenticationDetails {
private final Logger log = LoggerFactory.getLogger(CustomWebAuthenticationDetails.class);
private final String clientid;
CustomWebAuthenticationDetails(final HttpServletRequest request) {
super(request);
clientid = request.getHeader("clientid");
log.debug("User Agent {}", request.getHeader("User-Agent"));
}
public String getClientid() {
return clientid;
}
}
и настройте
@Component
public class CustomWebAuthenticationDetailsSource implements AuthenticationDetailsSource<HttpServletRequest, WebAuthenticationDetails> {
@Override
public WebAuthenticationDetails buildDetails(final HttpServletRequest context) {
return new CustomWebAuthenticationDetails(context);
}
}
и теперь управляйте или перечисляйте идентификаторы этого сеанса пользователем, а когда пользователь открывает новый сеанс, предупреждает по той же вкладке или уничтожает сеансы с помощью собственного фильтра безопасности и реализуетЦепочка фильтров безопасности управляет каждым запросом