0

我使用 spring-acegi,我想从 DAO 层检索 IP 地址。当我使用类似的东西时:

Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (auth != null) {
    WebAuthenticationDetails details1 = ((WebAuthenticationDetails)auth.getDetails());
    if (details1 != null) {
        userIp = details1.getRemoteAddress();
    }
}

在身份验证的那一刻,身份验证为空,我无法检索 IP 地址。

我也试图通过

String remoteAddress = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes())
       .getRequest().getRemoteAddr();

但得到一个编译错误(我们使用 GWT)。

有人可以帮我吗?谢谢。

4

1 回答 1

0

移动你的

String remoteAddress = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest().getRemoteAddr();

代码到客户端共享之外的 某个类中。查看您的应用程序 *.gwt.xml 描述符。例如,如果您将 com/domain/App.gwt.xml 作为 GWT 描述符,并且您的源包被声明为

<source path="client" />
<source path="shared" />

那么您必须在com.domain.clientcom.domain.shared包之外编写代码。

考虑对您的代码进行一些重构。如果您的 DAO 层绝对需要了解 IP,那么最好将其作为参数发送给某个方法调用。

于 2013-01-31T13:14:26.297 回答