当客户端订阅特定频道时,我想存储客户端UserName和SessionId。当我覆盖canHandshake()时,我可以使用以下内容获取用户凭据:
userName = (String) authentication.get("userName");
sessionId = (String) authentication.get("sessionId");
只是想知道我如何存储这些凭据然后检索它们?我已经查看了身份验证文档here,它只是提到将身份验证数据链接到会话。这是Bayeux Server端会话吗?
由于
答案 0 :(得分:0)
“链接”可以通过多种方式完成。
您可以通过以下方式在外部地图中链接此信息:
@Override
public boolean canHandshake(BayeuxServer server, ServerSession session, ServerMessage message)
{
...
Map<String, Object> authentication = ...;
map.put((String)authentication.get("userName"), session);
...
}
其中map
可以是安全策略本身的java.util.ConcurrentHashMap<String, ServerSession>
字段,也可以是其他对象(如用户服务)。
对于更简单的用例,userName
可以通过这种方式直接链接到会话:
session.setAttribute("userName", authentication.get("userName"));
或者你可以使用这两种技术。
这是用于身份验证方法的updated link,您可以在http://docs.cometd.org找到最新的综合CometD文档。