Cra*_*lus 6 java tomcat web-applications java-ee servlet-filters
检测Web应用程序是否在本地访问的最佳方法是什么?
我有兴趣在过滤器(javax.servlet.Filter)中检查它.
我可以检查ServletRequest#getRemoteAddr()它是否是,127.0.0.1但如果它在IPv6机器上运行,地址将是0:0:0:0:0:0:0:1.
是否还有其他陷阱我应该注意,或者如果我只检查这两个字符串模式,我会没事的?
谢谢
Bal*_*usC 11
从理论上讲,以下内容应该足够了.
if (request.getRemoteAddr().equals(request.getLocalAddr())) {
// Locally accessed.
} else {
// Remotely accessed.
}
Run Code Online (Sandbox Code Playgroud)
根据评论更新,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.
}
}
Run Code Online (Sandbox Code Playgroud)
在我的情况下,localAddresses包含以下内容:
[192.168.1.101, 0:0:0:0:0:0:0:1, 127.0.0.1]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7616 次 |
| 最近记录: |