Skip to content

Commit f254b20

Browse files
committed
feat: 在用户登录事件中记录客户IP
1 parent c7d3f31 commit f254b20

File tree

5 files changed

+13
-3
lines changed

5 files changed

+13
-3
lines changed

server/api-service/barda-domain/src/main/java/com/barda/domain/auditlog/service/AuditLogEventListener.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public class AuditLogEventListener {
3737
public void onUserLoginEvent(UserLoginEvent event) {
3838
LinkedHashMap<String, Object> detail = new LinkedHashMap<>();
3939
detail.put("loginWay", event.getSource());
40+
detail.put("clientIp", event.getClientIp());
4041
this.record(event, detail);
4142
}
4243

server/api-service/barda-infra/src/main/java/com/barda/infra/event/user/UserLoginEvent.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@ public class UserLoginEvent extends AbstractEvent {
1212

1313
private final String source;
1414

15+
/**
16+
* 登录者的客户端IP地址
17+
*/
18+
private final String clientIp;
19+
1520
@Override
1621
public EventType getEventType() {
1722
return EventType.USER_LOGIN;

server/api-service/barda-server/src/main/java/com/barda/api/authentication/service/AuthenticationApiServiceImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ public Mono<Void> loginOrRegister(AuthUser authUser, ServerWebExchange exchange,
238238
return invitationApiService.inviteUser(invitationId);
239239
})
240240
// 发布事件
241-
.then(businessEventPublisher.publishUserLoginEvent(authUser.getSource()));
241+
.then(businessEventPublisher.publishUserLoginEvent(authUser.getSource(), exchange));
242242
}
243243

244244
/**

server/api-service/barda-server/src/main/java/com/barda/api/usermanagement/OrganizationController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ public Mono<ResponseView<?>> setCurrentOrganization(@PathVariable String orgId,
136136
// 切换到指定的组织
137137
.then(orgApiService.switchCurrentOrganizationTo(orgId))
138138
// 延迟直到发布用户登录事件
139-
.delayUntil(result -> businessEventPublisher.publishUserLoginEvent(null))
139+
.delayUntil(result -> businessEventPublisher.publishUserLoginEvent(null, serverWebExchange))
140140
// 检查组织域并构建响应视图
141141
.flatMap(result -> orgApiService.checkOrganizationDomain()
142142
.flatMap(OrganizationDomainCheckResult::buildOrganizationDomainCheckView)

server/api-service/barda-server/src/main/java/com/barda/api/util/BusinessEventPublisher.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,12 @@
5151
import com.barda.infra.event.groupmember.GroupMemberRoleUpdateEvent;
5252
import com.barda.infra.event.user.UserLoginEvent;
5353
import com.barda.infra.event.user.UserLogoutEvent;
54+
import com.barda.infra.util.NetworkUtils;
5455
import com.barda.sdk.util.LocaleUtils;
5556

5657
import lombok.extern.slf4j.Slf4j;
5758
import reactor.core.publisher.Mono;
59+
import org.springframework.web.server.ServerWebExchange;
5860

5961
@Slf4j
6062
@Component
@@ -150,13 +152,15 @@ public Mono<Void> publishApplicationCommonEvent(ApplicationView applicationView,
150152
});
151153
}
152154

153-
public Mono<Void> publishUserLoginEvent(String source) {
155+
public Mono<Void> publishUserLoginEvent(String source, ServerWebExchange exchange) {
156+
String clientIp = NetworkUtils.getRemoteIp(exchange);
154157
return sessionUserService.getVisitorOrgMember()
155158
.doOnNext(orgMember -> {
156159
UserLoginEvent event = UserLoginEvent.builder()
157160
.orgId(orgMember.getOrgId())
158161
.userId(orgMember.getUserId())
159162
.source(source)
163+
.clientIp(clientIp)
160164
.build();
161165
applicationEventPublisher.publishEvent(event);
162166
})

0 commit comments

Comments
 (0)