diff options
Diffstat (limited to 'microservices/02-api-gateway/src/main/java/com/example/apigateway/security/controllers')
| -rw-r--r-- | microservices/02-api-gateway/src/main/java/com/example/apigateway/security/controllers/UserRestController.java | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/microservices/02-api-gateway/src/main/java/com/example/apigateway/security/controllers/UserRestController.java b/microservices/02-api-gateway/src/main/java/com/example/apigateway/security/controllers/UserRestController.java new file mode 100644 index 0000000..5d6581c --- /dev/null +++ b/microservices/02-api-gateway/src/main/java/com/example/apigateway/security/controllers/UserRestController.java @@ -0,0 +1,36 @@ +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<Map<String, Object>> getLoggedInUser(@AuthenticationPrincipal OAuth2User principal) { + if (principal == null) { + return Mono.just(Map.of()); + } + + // Filter roles starting with "ROLE_" + List<String> 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)); + } +} |
