package com.example.apigateway.security.controllers; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.security.oauth2.core.user.OAuth2User; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import reactor.core.publisher.Mono; @RestController public class UserRestController { @GetMapping("/api/security/me") public Mono> getLoggedInUser(@AuthenticationPrincipal OAuth2User principal) { if (principal == null) { return Mono.just(Map.of()); } // Filter roles starting with "ROLE_" List roles = principal.getAuthorities().stream() .map(grantedAuthority -> grantedAuthority.getAuthority()) .filter(authority -> authority.startsWith("ROLE_")) .map(s -> s.substring(5)) // Cut ROLE_ part .collect(Collectors.toList()); return Mono.just(Map.of( "username", principal.getAttribute("sub"), // "name", principal.getName(), // "email", principal.getEmail(), "roles", roles)); } }