AngularJS Atmosphere Websockets: возможно ли получить атрибуты в AtmosphereResource из HttpServlet?

#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, чтобы получить сохраненное значение пользователя?