gpt4 book ai didi

java - 如何检查客户端是否在Java中是本地的

转载 作者:行者123 更新时间:2023-11-28 22:38:21 24 4
gpt4 key购买 nike

我有一个运行 Apache Tomcat 并使用 Spring 开发的服务器端应用程序。我需要阻止某些用户访问本地网络之外的应用程序。我一直在寻找一段时间,但我找不到解决这个问题的方法。 Spring是否提供了根据用户权限限制用户内部/外部访问的功能?

最佳答案

servlet 规范允许您查看远程 IP 地址,ServletRequest#getRemoteAddr()。通过 IP 地址限制访问的传统方法是使用 servlet 过滤器 将 IP 地址范围列入白名单或黑名单。您可以搜索可以添加到 spring 应用程序的 servlet 过滤器实现。您只需要配置它。但是...确保您选择的实现说明以下内容。如果您找不到解决此问题的方法,请考虑自己编写。

要注意的主要一点是,您的服务器看到的“远程地址根本不能保证识别客户端机器。这是一个网络问题,而不是 Spring/servlet 问题。您的服务器看到的远程地址,甚至可能是您自己内部网络上的负载平衡器或其他网络设备的 IP。

阅读有关 HTTP header 的信息 X-Forwarded-For .如果您的内部网络上的反向代理或某些配置中的负载平衡器在 TCP/IP 堆栈(例如 HTTP)中的应用层转发请求,因此在 HTTP 的情况下更改您的服务器看到的原始 IP该设备通常会将原始 IP 包含或添加到此 header 中。事实上,此 header 可以包含原始 IP 地址的列表,以防请求通过始发组织或互联网途中的多个 NAT 或代理在到达您自己的网络之前。

我肯定会建议将允许 地址列入保守的白名单,而不是将禁止地址列入黑名单。如果您的网络架构发生变化,这可能会更加稳健,但如果在您的内部网络上重新分配 IP,您仍然需要小心。

您的 servlet 过滤器可以结合使用 ServletRequest#getRemoteAddr() 和解析 X-Forwarded-For header 。

另请记住在您的设计和白名单或黑名单中包含任何 IPv6 地址。

关于java - 如何检查客户端是否在Java中是本地的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11740476/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com