#java #ajax #angularjs #atmosphere
#java #ajax #angularjs #атмосфера
Вопрос:
Я новичок в Atmosphere framework и websockets.
Я разрабатываю одностраничное приложение, в качестве первого шага я хочу реализовать базовую аутентификацию с использованием AngularJS (на стороне клиента) и Atmosphere websockets (на стороне сервера).
Для аутентификации вначале я использовал обычные сервлеты и сохранил пользовательский компонент в HttpSession. Но позже я понял, что не могу получить доступ к атрибутам сеанса в классе (служба websocket)
@AtmosphereService(broadcaster = JerseyBroadcaster.class)
Итак, я создал другой Login AtmosphereService, в котором метод suspend проверяет пользователя и, если пользователь существует, затем сохраняет UserBean в ConcurrentMap по ключу uuid, используя следующий метод, чтобы я мог получить доступ в будущем.
public void createSession(AtmosphereResource resource) {
logger.debug("Create session ({})", resource.uuid());
ConcurrentMap<String, Object> session = new ConcurrentHashMap<String, Object>();
ConcurrentMap<String, Object> prevSession = sessionsByUuid.putIfAbsent(resource.uuid(), session);
if (prevSession != null) {
logger.warn("Session already exists ({})", resource.uuid());
}
}
Итак, на стороне клиента, поскольку у меня есть AngularJS и настроенные маршруты, когда пользователь входит в систему, я сохраняю пользовательский ключ в переменной rootscope, и при изменении маршрута он проверяет следующим образом.
$rootScope.$on("$routeChangeStart", function(event, next, current) {
aNext = next;
if (next.templateUrl != "./partials/login.html") {
if($rootScope.loggedUser !=null amp;amp; $rootScope.loggedUser!=""){
$location.path(nextPage);
}else{
$rootScope.goLoginPage();
}
}
});
Но теперь проблема в том, что если пользователь обновит страницу, он перейдет на страницу входа в систему, потому что $rootScope.loggedUser не будет содержать ничего.
Раньше, когда я использовал простые сервлеты для аутентификации, я использовал ajax-вызов сервлета, чтобы проверить, существует пользователь в сеансе или нет, и если он существует, я назначил пользовательский ключ в $rootScope.loggedUser и маршрут, используемый для правильного изменения.
Теперь, когда я использую AtmosphereService вместо обычных сервлетов для аутентификации, как я могу сделать запрос либо к сервлету (в котором я должен получить доступ к AtmosphereResource), либо я должен написать другой AtmosphereService, чтобы получить сохраненное значение пользователя?