在一个基于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
。这将是本地主机的IP v6地址。如果该方法返回我一个IP v6地址,我如何检查现在对IP v4地址的白名单?我可以为白名单提供IP v4和v6的兼容性吗?谢谢你的真知灼见!
如果它是您的本地Tomcat,那么尝试不通过http://localhost:8080/...
调用它,尝试通过http://127.0.0.1:8080/..
调用它
姗姗来迟,但仍有意义。在启动脚本/运行配置中添加以下参数将为您提供ipV4地址,而不是ipV6。
-Djava.net.preferIPv4Stack = true