|
@@ -15,26 +15,30 @@
|
|
|
*/
|
|
|
package sample.web;
|
|
|
|
|
|
-import org.springframework.http.HttpHeaders;
|
|
|
+import static org.springframework.security.oauth2.client.web.reactive.function.client.OAuth2AuthorizedClientExchangeFilterFunction.oauth2AuthorizedClient;
|
|
|
+
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
import org.springframework.security.oauth2.client.OAuth2AuthorizedClient;
|
|
|
import org.springframework.security.oauth2.client.annotation.OAuth2Client;
|
|
|
import org.springframework.stereotype.Controller;
|
|
|
import org.springframework.ui.Model;
|
|
|
import org.springframework.util.StringUtils;
|
|
|
import org.springframework.web.bind.annotation.GetMapping;
|
|
|
-import org.springframework.web.reactive.function.client.ClientRequest;
|
|
|
-import org.springframework.web.reactive.function.client.ExchangeFilterFunction;
|
|
|
import org.springframework.web.reactive.function.client.WebClient;
|
|
|
-import reactor.core.publisher.Mono;
|
|
|
-
|
|
|
-import java.util.Collections;
|
|
|
-import java.util.Map;
|
|
|
|
|
|
/**
|
|
|
* @author Joe Grandja
|
|
|
+ * @author Rob Winch
|
|
|
*/
|
|
|
@Controller
|
|
|
public class OAuth2LoginController {
|
|
|
+ private final WebClient webClient;
|
|
|
+
|
|
|
+ public OAuth2LoginController(WebClient webClient) {
|
|
|
+ this.webClient = webClient;
|
|
|
+ }
|
|
|
|
|
|
@GetMapping("/")
|
|
|
public String index(Model model, @OAuth2Client OAuth2AuthorizedClient authorizedClient) {
|
|
@@ -49,11 +53,10 @@ public class OAuth2LoginController {
|
|
|
String userInfoEndpointUri = authorizedClient.getClientRegistration()
|
|
|
.getProviderDetails().getUserInfoEndpoint().getUri();
|
|
|
if (!StringUtils.isEmpty(userInfoEndpointUri)) { // userInfoEndpointUri is optional for OIDC Clients
|
|
|
- userAttributes = WebClient.builder()
|
|
|
- .filter(oauth2Credentials(authorizedClient))
|
|
|
- .build()
|
|
|
+ userAttributes = this.webClient
|
|
|
.get()
|
|
|
.uri(userInfoEndpointUri)
|
|
|
+ .attributes(oauth2AuthorizedClient(authorizedClient))
|
|
|
.retrieve()
|
|
|
.bodyToMono(Map.class)
|
|
|
.block();
|
|
@@ -61,14 +64,4 @@ public class OAuth2LoginController {
|
|
|
model.addAttribute("userAttributes", userAttributes);
|
|
|
return "userinfo";
|
|
|
}
|
|
|
-
|
|
|
- private ExchangeFilterFunction oauth2Credentials(OAuth2AuthorizedClient authorizedClient) {
|
|
|
- return ExchangeFilterFunction.ofRequestProcessor(
|
|
|
- clientRequest -> {
|
|
|
- ClientRequest authorizedRequest = ClientRequest.from(clientRequest)
|
|
|
- .header(HttpHeaders.AUTHORIZATION, "Bearer " + authorizedClient.getAccessToken().getTokenValue())
|
|
|
- .build();
|
|
|
- return Mono.just(authorizedRequest);
|
|
|
- });
|
|
|
- }
|
|
|
}
|