只接受我的应用程序的连接

时间:2012-06-20 11:06:49

标签: java sockets

我正在开发一个java项目,我们有一个服务器和一个客户端应用程序。服务器接受连接并通过套接字编程将请求的数据发送到客户端。

一切正常但是当上传并在服务器上工作时,我会从未知的ip获得连接。此应用程序将在许多国家/地区使用,因此不会将特定的IP用于白名单。

有没有办法禁止/拒绝这些ip,以便服务器只能使用套接字接受来自我的应用程序的连接。是否可以在请求与服务器的连接时发送自定义数据,以便它告诉服务器只接受这些连接。

3 个答案:

答案 0 :(得分:2)

您描述的选择性接受属于authentication and authorization的范围。您需要将客户端连接到:

  1. 向您表明身份,以便您可以确定他们是否可以访问服务器。这可以通过多种方式实现,即IP或MAC地址白名单,client side certificatesbasic/digest authentication或其他一些自定义身份验证方案。
  2. 一旦允许访问,您可以通过授权规则进一步确定连接客户端在系统中可以执行的操作。
  3. 我建议你看一下像Apache Shiro这样的图书馆,它会为你做一些繁重的工作。

答案 1 :(得分:1)

接受入站连接后,您可以在返回的Socket上使用Socket.getInetAddress()来检索并随后验证IP。

如果不允许使用IP,请使用Socket.close()关闭不需要的连接。

修改
验证当然可以基于IP之外的事情。连接打开后,您可以使用其流来传输任意数据以识别客户端,例如在身份验证失败后关闭连接。

但是,您应该考虑是否有人能够拦截您的通信。换句话说,使用安全连接是有道理的。

我不知道在打开(接受)连接之前可以用Java验证客户端的方式。

答案 2 :(得分:0)

如果要验证您的服务器和客户端,您还应该考虑使用证书。

以下是一些更多信息: