我是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吗