AngularJS + Atmosphere Websockets:是否可以从HttpServlet中检索AtmosphereResource中的属性?

时间:2014-06-20 13:33:16

标签: java ajax angularjs atmosphere

我是Atmosphere框架& amp;的新手。的WebSockets。

我正在开发单页应用程序,作为第一步,我想使用AngularJs(客户端)和Atmosphere websockets(服务器端)实现基本身份验证。

对于身份验证,在开始时,我使用了普通的servlet并在HttpSession中保存了User bean。但后来我明白了,我无法访问类中的会话属性(websocket服务)

@AtmosphereService(broadcaster = JerseyBroadcaster.class)

所以,我创建了另一个Login AtmosphereService,其中suspend方法检查用户以及用户是否存在,然后使用以下方法将ConcubMap中的UserBean存储在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 && $rootScope.loggedUser!=""){
           $location.path(nextPage);
        }else{
           $rootScope.goLoginPage();
        }
    }
});

但现在问题是如果用户刷新页面它会进入登录页面,因为$ rootScope.loggedUser将不包含任何内容。

之前,当我使用简单的servlet进行身份验证时,我使用了对servlet的ajax调用来检查会话中是否存在用户,如果他存在,我在$ rootScope.loggedUser中分配了用户密钥,并使用了用于更改的路由正常。

现在我正在使用AtmosphereService而不是普通的servlet进行身份验证,我如何向servlet(我应该访问AtmosphereResource)发出请求,或者我应该编写另一个AtmosphereService以获取存储的UserBean吗

0 个答案:

没有答案