From aa122113ade36f02dc8fdbebdf1232b5c4b8742c Mon Sep 17 00:00:00 2001 From: Kamal Wickramanayake Date: Fri, 3 Jul 2026 19:02:36 +0530 Subject: Microservice sample projects --- .../security/controllers/UserRestController.java | 36 ++++++++++++++++++++++ .../apigateway/security/dto/UserResonseDto.java | 16 ++++++++++ 2 files changed, 52 insertions(+) create mode 100644 microservices/02-api-gateway/src/main/java/com/example/apigateway/security/controllers/UserRestController.java create mode 100644 microservices/02-api-gateway/src/main/java/com/example/apigateway/security/dto/UserResonseDto.java (limited to 'microservices/02-api-gateway/src/main/java/com/example/apigateway/security') 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> 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)); + } +} diff --git a/microservices/02-api-gateway/src/main/java/com/example/apigateway/security/dto/UserResonseDto.java b/microservices/02-api-gateway/src/main/java/com/example/apigateway/security/dto/UserResonseDto.java new file mode 100644 index 0000000..d553d9a --- /dev/null +++ b/microservices/02-api-gateway/src/main/java/com/example/apigateway/security/dto/UserResonseDto.java @@ -0,0 +1,16 @@ +package com.example.apigateway.security.dto; + +import java.util.List; + +public class UserResonseDto { + private List roles; + + // Getters and Setters + public List getRoles() { + return roles; + } + + public void setRoles(List roles) { + this.roles = roles; + } +} -- cgit v1.2.3