Spring Acegi提供了登录后置处理功能,这是通过ApplicationEvent事件触发的,我实现
该功能,但是无法获取用户IP,如何获取用户IP,麻烦那位指点一二。
代码大概如下所示:
public void onApplicationEvent(ApplicationEvent event) {
if (event instanceof AuthenticationSuccessEvent) {①判断是否是认证成功的事件
AuthenticationSuccessEvent authEvent = (AuthenticationSuccessEvent)event;
Authentication auth = authEvent.getAuthentication();
String userName = auth.getName();
②这里,我们仅通过一条输出信息的语句模拟记录登录日志的操作
System.out.println("模拟记录用户["+userName+"]成功登录日志...");
}
}
}
[b]问题补充:[/b]
我的代码如下:
public class LoginSuccessListener implements ApplicationListener {
public void onApplicationEvent(ApplicationEvent event) {
if (event instanceof AuthenticationSuccessEvent) {①判断是否是认证成功的事件
AuthenticationSuccessEvent authEvent = (AuthenticationSuccessEvent)event;
Authentication auth = authEvent.getAuthentication();
String userName = auth.getName();
②这里,我们仅通过一条输出信息的语句模拟记录登录日志的操作
System.out.println("模拟记录用户["+userName+"]成功登录日志...");
}
}
}
}
注意了是实现了ApplicationListener接口,你所说的:WebAuthenticationDetails WebDetail = (WebAuthenticationDetails) SecurityContextHolder
.getContext().getAuthentication().getDetails(); 取值为null.
[b]问题补充:[/b]
你看我糊涂的,ecurityContextHolder
.getContext().getAuthentication() 取值为null,那可以用authEvent.getAuthentication()去取