Skip to content

Commit 437ea26

Browse files
author
FalkWolsky
committed
Fixing BusinessEventPublisher
1 parent 6b519d5 commit 437ea26

File tree

3 files changed

+21
-8
lines changed

3 files changed

+21
-8
lines changed

server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/framework/filter/ApiEventFilter.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
12
package org.lowcoder.api.framework.filter;
23

34
import com.google.common.hash.Hashing;
@@ -17,6 +18,7 @@
1718
import org.springframework.web.server.WebFilterChain;
1819
import reactor.core.publisher.Mono;
1920
import reactor.core.scheduler.Schedulers;
21+
import reactor.util.context.ContextView;
2022

2123
import java.nio.charset.StandardCharsets;
2224
import java.util.Optional;
@@ -40,7 +42,7 @@ public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
4042
String token = contextView.get(VISITOR_TOKEN);
4143
((Mono<OrgMember>) contextView.get(CURRENT_ORG_MEMBER))
4244
.flatMap(orgMember -> {
43-
emitEvent(exchange.getRequest(), token, orgMember);
45+
emitEvent(exchange.getRequest(), token, orgMember, contextView);
4446
return Mono.empty();
4547
})
4648
.subscribeOn(Schedulers.boundedElastic())
@@ -51,7 +53,7 @@ public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
5153
);
5254
}
5355

54-
private void emitEvent(ServerHttpRequest request, String token, OrgMember orgMember) {
56+
private void emitEvent(ServerHttpRequest request, String token, OrgMember orgMember, ContextView contextView) {
5557
MultiValueMap<String, String> headers = writableHttpHeaders(request.getHeaders());
5658
headers.remove("Cookie");
5759
Optional<String> ipAddressOptional = headers.remove("X-Real-IP").stream().findFirst();
@@ -69,7 +71,7 @@ private void emitEvent(ServerHttpRequest request, String token, OrgMember orgMem
6971
.queryParams(request.getQueryParams())
7072
.ipAddress(ipAddress)
7173
.build();
72-
event.populateDetails();
74+
event.populateDetails(contextView);
7375

7476
log.debug("API call event emitted for '{}' from org '{}' on URI: {}", orgMember.getUserId(), orgMember.getUserId(), request.getURI().getPath());
7577
applicationEventPublisher.publishEvent(event);

server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/framework/filter/GlobalContextFilter.java

+7
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import org.springframework.http.HttpMethod;
1717
import org.springframework.http.server.reactive.ServerHttpRequest;
1818
import org.springframework.stereotype.Component;
19+
import org.springframework.util.MultiValueMap;
1920
import org.springframework.web.server.ServerWebExchange;
2021
import org.springframework.web.server.WebFilter;
2122
import org.springframework.web.server.WebFilterChain;
@@ -32,6 +33,7 @@
3233
import static org.lowcoder.sdk.constants.Authentication.isAnonymousUser;
3334
import static org.lowcoder.sdk.constants.GlobalContext.*;
3435
import static org.lowcoder.sdk.util.IDUtils.generate;
36+
import static org.springframework.http.HttpHeaders.writableHttpHeaders;
3537

3638
@Component
3739
@RequiredArgsConstructor
@@ -107,6 +109,11 @@ private Map<String, Object> buildContextMap(ServerWebExchange serverWebExchange,
107109
contextMap.put(CURRENT_ORG_MEMBER, orgMemberService.getCurrentOrgMember(visitorId).cache());
108110
contextMap.put(VISITOR_TOKEN, cookieHelper.getCookieToken(serverWebExchange));
109111
contextMap.put(DOMAIN, UriUtils.getRefererDomainFromRequest(serverWebExchange));
112+
113+
//Analytics related fields
114+
MultiValueMap<String, String> headers = writableHttpHeaders(request.getHeaders());
115+
headers.remove("Cookie");
116+
contextMap.put(HEADERS, headers);
110117
return contextMap;
111118
}
112119

server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/util/ApiCallEventPublisher.java

+9-5
Original file line numberDiff line numberDiff line change
@@ -48,19 +48,20 @@ public void deleteMapping(){}
4848
@Pointcut("@annotation(org.springframework.web.bind.annotation.PatchMapping)")
4949
public void patchMapping(){}
5050

51+
@SuppressWarnings("unchecked")
5152
@Around("(getMapping() || postMapping() || putMapping() || deleteMapping() || patchMapping())")
5253
public Object handleAPICallEvent(ProceedingJoinPoint joinPoint) throws Throwable {
5354

5455
return sessionUserService.getVisitorToken()
5556
.zipWith(sessionUserService.getVisitorOrgMemberCacheSilent().defaultIfEmpty(OrgMember.NOT_EXIST))
5657
.zipWith(ReactiveRequestContextHolder.getRequest())
57-
.doOnNext(
58+
.delayUntil(
5859
tuple -> {
5960
String token = tuple.getT1().getT1();
6061
OrgMember orgMember = tuple.getT1().getT2();
6162
ServerHttpRequest request = tuple.getT2();
6263
if (orgMember == OrgMember.NOT_EXIST) {
63-
return;
64+
return Mono.empty();
6465
}
6566
MultiValueMap<String, String> headers = writableHttpHeaders(request.getHeaders());
6667
headers.remove("Cookie");
@@ -77,8 +78,11 @@ public Object handleAPICallEvent(ProceedingJoinPoint joinPoint) throws Throwable
7778
.queryParams(request.getQueryParams())
7879
.ipAddress(ipAddress)
7980
.build();
80-
event.populateDetails();
81-
applicationEventPublisher.publishEvent(event);
81+
return Mono.deferContextual(contextView -> {
82+
event.populateDetails(contextView);
83+
applicationEventPublisher.publishEvent(event);
84+
return Mono.empty();
85+
});
8286
})
8387
.onErrorResume(throwable -> {
8488
log.error("handleAPICallEvent error {} for: {} ", joinPoint.getSignature().getName(), EventType.API_CALL_EVENT, throwable);
@@ -87,4 +91,4 @@ public Object handleAPICallEvent(ProceedingJoinPoint joinPoint) throws Throwable
8791
.then((Mono) joinPoint.proceed());
8892
}
8993

90-
}
94+
}

0 commit comments

Comments
 (0)