class Oauth2ServerAuthSuccessHandler implements ServerAuthenticationSuccessHandler {
    @Override
    public Mono<Void> onAuthenticationSuccess(WebFilterExchange webFilterExchange, Authentication authentication) {<FILL_FUNCTION_BODY>}
}

        MultiValueMap<String, String> headerValues = new LinkedMultiValueMap<>(4);
        Object principal = authentication.getPrincipal();

        if (principal instanceof OAuth2IntrospectionAuthenticatedPrincipal authenticatedPrincipal) {
            Map<String, Object> claims = authenticatedPrincipal.getAttributes();
            Authentication auth = (Authentication)claims.get(Principal.class.getName());
            LoginAppUser user = LoginUserUtils.getUser(auth);
            if (user != null) {
                headerValues.add(SecurityConstants.USER_ID_HEADER, String.valueOf(user.getId()));
                headerValues.add(SecurityConstants.USER_HEADER, user.getUsername());
            }

            headerValues.add(SecurityConstants.ROLE_HEADER, CollectionUtil.join(authentication.getAuthorities(), ","));
            headerValues.add(SecurityConstants.TENANT_HEADER, (String)claims.get(SecurityConstants.CLIENT_ID));
            headerValues.add(SecurityConstants.ACCOUNT_TYPE_HEADER, (String)claims.get(SecurityConstants.ACCOUNT_TYPE_PARAM_NAME));
        }

        ServerWebExchange exchange = webFilterExchange.getExchange();
        ServerHttpRequest serverHttpRequest = exchange.getRequest().mutate()
                .headers(h -> h.addAll(headerValues))
                .build();

        ServerWebExchange build = exchange.mutate().request(serverHttpRequest).build();
        return webFilterExchange.getChain().filter(build);
    
<no_super_class>