1

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

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

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

4

3 回答 3

2

您描述的选择性接受属于身份验证和授权的范围。您需要将客户端连接到:

  1. 向您表明自己的身份,以便您确定是否允许他们访问服务器。这可以通过多种方式实现,例如 IP 或 MAC 地址白名单、客户端证书基本/摘要式身份验证或其他一些自定义身份验证方案。
  2. 一旦允许访问,您可以通过授权规则进一步缩小连接客户端可以在系统中执行的操作。

我建议你看看像Apache Shiro这样的库,它会为你做一些繁重的工作。

于 2012-06-20T11:22:17.817 回答
1

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

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

编辑:
验证当然可以基于 IP 以外的东西。连接打开后,您可以使用其流传输任意数据以识别客户端,例如在身份验证失败后关闭连接。

但是,这样做您应该考虑有人能够拦截您的通信的可能性。换句话说,使用安全连接是有意义的。

我不知道在打开(接受)连接之前可以在 Java 中对客户端进行身份验证的方法。

于 2012-06-20T11:09:16.773 回答
0

如果你的服务器和客户端应该被验证,你也应该考虑使用证书。

以下是更多信息:

于 2012-06-20T11:22:41.070 回答