有关从WebAuthenticationDetails.getRemoteAddress()返回的值的问题

时间:2010-11-16 05:58:45

标签: spring spring-security ip-address

我正在编写一个自定义AccessDecisionVoter,只有在允许ip地址列表中找到请求的远程地址时才允许访问某些资源。但是,WebAuthenticationDetails.getRemoteAddress()返回的远程地址的值采用的格式为Ipv6。在本地运行我的应用程序时,这是上述方法返回的内容:

0:0:0:0:0:0:0:1%0

我将允许的地址存储在属性文件的逗号分隔列表中。解析列表并将每个允许的地址与远程地址进行比较,但由于我不知道如何将Ipv4地址转换为Ipv6地址,因此这种比较总是会失败。

WebAuthenticationDetails.getRemoteAddress()总是返回的值是这样,还是因为我在本地运行它而看到这个?

有没有办法将此字符串转换为Ipv4字符串?

有没有办法让问题的方法返回一个Ipv4字符串?

谢谢!

1 个答案:

答案 0 :(得分:3)

您无法将IPv6地址转换为IPv4地址。代表两种不同的协议。 getRemoteAddress()的地址将采用一种格式,具体取决于用于创建webapp请求的协议。我想你只有在本地使用应用程序才能看到IPv6地址。 0:0:0:0:0:0:0:1localhost的地址,与IPv4中的127.0.0.1相同。我认为您应该将此IPv6地址添加到允许的IP列表中。