0

在基于 Spring 3 的 Web 应用程序中,我使用 AbstractUserDetailsAuthenticationProvider 的自定义实现,不仅可以检查用户名/密码对,还可以检查客户端的 IP 地址。但是,当我在内部调用时retrieveUser()

@Override
protected UserDetails retrieveUser(String username, UsernamePasswordAuthenticationToken authentication) throws AuthenticationException {
    ...
    String ipAddr = ((WebAuthenticationDetails)authentication.getDetails()).getRemoteAddress();
    ...
    User user = ...
    return user;
}

它返回0:0:0:0:0:0:0:1%0。这将是 localhost 的 IP v6 地址。如果该方法返回 IP v6 地址,我现在如何检查 IP v4 地址白名单?我可以为白名单提供与 IP v4 和 v6 的兼容性吗?感谢您的见解!

4

2 回答 2

3

如果它是您本地的 Tomcat,则尝试调用它,而不是调用它http://localhost:8080/...,尝试调用它http://127.0.0.1:8080/..

于 2011-04-18T08:36:18.340 回答
0

迟到了,但仍然很重要。将以下参数添加到您的启动脚本/运行配置将为您提供 ipV4 地址,而不是 ipV6。

-Djava.net.preferIPv4Stack=true

于 2014-12-10T12:15:12.187 回答