Untitled
unknown
plain_text
10 months ago
1.8 kB
16
Indexable
public class ReactiveUserContextFilter implements WebFilter {
/*
* In some the UserContext should always we created, i.e. we do not use the
* UserContext from request header, we create the UserContext from the access token
*/
@Value("${mvr.external-service:false}")
private boolean externalService;
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
log.info("reuseUserContext => " +externalService);
var response = exchange.getResponse();
response.beforeCommit(() -> {
List<String> userContextJson = response.getHeaders()
.getOrDefault(UserContext.USER_CONTEXT_KEY, Collections.emptyList());
if (!userContextJson.isEmpty()) {
response.getHeaders().remove(UserContext.USER_CONTEXT_KEY);
if(!externalService) {
response.getHeaders().add(UserContext.USER_CONTEXT_KEY, Base64.getEncoder().encodeToString(userContextJson.get(0).getBytes()));
}
}
return Mono.empty();
});
Mono<UserContext> userContext;
List<String> userContextJson = exchange
.getRequest()
.getHeaders()
.getOrDefault(UserContext.USER_CONTEXT_KEY, Collections.emptyList());
if (!userContextJson.isEmpty()) {
if(!externalService) {
userContext = Mono.just(UserContextHolder.fromJson(
new String(Base64.getDecoder().decode(userContextJson.get(0).getBytes())))
);
} else {
userContext = exchange.getPrincipal().map(UserContext::new);
}
} else {
userContext = exchange.getPrincipal().map(UserContext::new);
}
return UserContextHolder.setToReactiveContext(chain.filter(exchange), userContext);
}
}Editor is loading...
Leave a Comment