0

在我的 servlet/jsp 应用程序中,我有一个用户名、密码、user_role 存储在数据库中,我的应用程序在端口 8080 中运行。我有一个节点 js 应用程序在端口 8081 中运行以实现一些实时应用程序。我在我的节点 js 应用程序中使用 express 和 socket.io。我的两个应用程序都在 Windows Server 2008 中运行。

在我的节点 js 应用程序中,在运行以下代码之前:

 io.sockets.on('connection', function (socket) {
     //check if user is logged in jsp app then do following
     socket.emit('news', { hello: 'world' });
 });

我该如何实现这一点,或者如何从节点 js 访问 servlet/jsp 的会话?请向我推荐仅适用于 Windows 平台的解决方案。

4

1 回答 1

0

您将让您的服务器/jsp 应用程序创建一个身份验证令牌,然后将此令牌作为第一个客户端事件发送到您的 socket.io 服务器。

这意味着您无法在连接时验证 socket.io 客户端。socket.io 客户端需要先发送这个令牌。您的 socket.io 服务器检查此令牌,然后在客户端连接对象上设置一个经过身份验证的标志。

流动:

  • 浏览器从服务器/jsp 请求令牌
  • server/jsp 检查用户是否登录,如果是,则使用 userId 创建一个安全令牌(使用私钥)
  • 浏览器连接到 socket.io 服务器
  • 浏览器将令牌发送到 socket.io 服务器
  • socket.io 服务器检查令牌是否有效(使用公钥检查)
  • socket.io 在连接对象上设置一个认证标志。

...

  • socket.io 服务器仅向带有身份验证标志的连接发出事件。
于 2013-07-04T08:59:46.060 回答