java后端springboot获取登录人的ip
时间: 2024-09-06 17:06:54 浏览: 52
在Spring Boot项目中,获取用户登录时的IP地址通常需要结合Web过滤器(Filter)或拦截器(Interceptor)。你可以创建一个Filter或者自定义一个AOP切面(Aspect),在`doFilter()`或`before()`方法中获取客户端的请求头信息`X-Forwarded-For`。
下面是一个简单的例子,展示如何通过`HttpServletRequest`对象获取IP:
```java
import org.springframework.web.filter.OncePerRequestFilter;
public class IpLoggingFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {
String remoteUser = request.getRemoteUser(); // 获取用户名,如果未登录则为空
String ipAddress = request.getRemoteAddr(); // 默认的客户端IP
if (request.getHeader("X-Forwarded-For") != null) { // 如果存在代理服务器,则取第一个逗号前的IP作为真实IP
ipAddress = request.getHeader("X-Forwarded-For").split(",")[0];
}
// 在这里处理你想记录的IP信息,例如日志、存储到数据库等
log.info("User [{}] is logged in from IP: {}", remoteUser, ipAddress);
chain.doFilter(request, response);
}
}
```
然后你需要将这个过滤器添加到Spring Boot的配置文件`application.properties`或`application.yml`中,注册它:
```properties
spring-boot.admin.filters=IpLoggingFilter
```
或者在`WebMvcConfigurer`中注册:
```java
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
// ...其他配置...
}
@Bean
public IpLoggingFilter ipLoggingFilter() {
return new IpLoggingFilter();
}
}
```
阅读全文