如何解决java-使用过滤器检查远程地址
从理论上讲,以下内容应足够。
if (request.getRemoteAddr().equals(request.getLocalAddr())) {
// Locally accessed.
} else {
// Remotely accessed.
}
,request.getLocalAddr()
似乎返回0.0.0.0
,当服务器位于代理后面时确实可能发生。
您可能需要将其与解析的地址进行比较InetAddress
。
private Set<String> localAddresses = new HashSet<String>();
@Override
public void init(FilterConfig config) throws ServletException {
try {
localAddresses.add(InetAddress.getLocalHost().getHostAddress());
for (InetAddress inetAddress : InetAddress.getAllByName("localhost")) {
localAddresses.add(inetAddress.getHostAddress());
}
} catch (IOException e) {
throw new ServletException("Unable to lookup local addresses");
}
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
if (localAddresses.contains(request.getRemoteAddr())) {
// Locally accessed.
} else {
// Remotely accessed.
}
}
就我而言,localAddresses
包含以下内容:
[192.168.1.101, 0:0:0:0:0:0:0:1, 127.0.0.1]
解决方法
检测Web应用程序是否在本地访问的最佳方法是什么?
我有兴趣在 过滤器 (javax.servlet.Filter
)中对此进行检查。
我可以检查ServletRequest#getRemoteAddr()
是否存在,127.0.0.1
但是如果它在IPv6机器中运行,则地址为0:0:0:0:0:0:0:1
。
还有其他我应该注意的陷阱吗?或者,如果仅检查这两个字符串模式,我会没事吗?
谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。