我有一个运行 Apache Tomcat 并使用 Spring 开发的服务器端应用程序。我需要阻止一些用户访问本地网络之外的应用程序。我一直在寻找一段时间,但我找不到解决这个问题的方法。Spring 是否提供基于用户权限限制用户内部/外部访问的功能?
servlet 规范允许您查看远程 IP 地址ServletRequest#getRemoteAddr()。通过 IP 地址限制访问的传统方法是使用servlet 过滤器将 IP 地址范围列入白名单或黑名单。您可以搜索可以添加到 Spring 应用程序的 servlet 过滤器实现。你只需要配置它。但是...确保实现您选择的帐户以下。如果您找不到可以解释这一点的方法,请考虑自己编写。
需要注意的主要问题是,您的服务器所看到的“远程地址”根本不能保证识别客户端计算机。这是一个网络问题,而不是 Spring/servlet 问题。您的服务器看到的远程地址,甚至可能是您自己内部网络上的负载平衡器或其他网络设备的 IP。
阅读有关 HTTP 标头X-Forwarded-For 的信息。如果内部网络上的反向代理或某些配置中的负载平衡器在 TCP/IP 堆栈(例如 HTTP)的应用层转发请求,并因此更改服务器看到的原始 IP(在 HTTP 的情况下)该设备通常会在此标头中包含或添加原始 IP。事实上,该标头可以包含原始 IP 地址列表,以防请求在到达您自己的网络之前通过原始组织中的多个NAT 或代理或在 Internet 上的途中。
我建议保守地将允许地址列入白名单,而不是将禁止地址列入黑名单。如果您的网络架构发生变化,这可能会更健壮,但如果在您的内部网络上重新分配 IP,您仍然需要小心。
您的 servlet 过滤器可以结合使用ServletRequest#getRemoteAddr()和解析X-Forwarded-For标头。
还要记住在您的设计和白名单或黑名单中包含任何 IPv6 地址。
| 归档时间: |
|
| 查看次数: |
1179 次 |
| 最近记录: |