通过检查客户端的 IP v4 地址来保护 Spring Web 应用程序



在一个基于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

最新更新