Skip to content

Commit 07e2c92

Browse files
committed
Spring security @RegisteredOAuth2AuthorizedClient is not handled in the right way. Fixes #2595
1 parent 4059109 commit 07e2c92

File tree

5 files changed

+68
-0
lines changed

5 files changed

+68
-0
lines changed

Diff for: springdoc-openapi-starter-common/pom.xml

+5
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,11 @@
5151
<artifactId>spring-security-oauth2-authorization-server</artifactId>
5252
<optional>true</optional>
5353
</dependency>
54+
<dependency>
55+
<groupId>org.springframework.security</groupId>
56+
<artifactId>spring-security-oauth2-client</artifactId>
57+
<optional>true</optional>
58+
</dependency>
5459
<!-- Kotlin -->
5560
<dependency>
5661
<groupId>com.fasterxml.jackson.module</groupId>

Diff for: springdoc-openapi-starter-common/src/main/java/org/springdoc/core/configuration/SpringDocSecurityConfiguration.java

+19
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
import org.springframework.http.HttpStatus;
5959
import org.springframework.security.core.Authentication;
6060
import org.springframework.security.core.annotation.AuthenticationPrincipal;
61+
import org.springframework.security.oauth2.client.annotation.RegisteredOAuth2AuthorizedClient;
6162
import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService;
6263
import org.springframework.security.web.FilterChainProxy;
6364
import org.springframework.security.web.SecurityFilterChain;
@@ -169,6 +170,9 @@ OpenApiCustomizer springSecurityLoginEndpointCustomiser(ApplicationContext appli
169170
}
170171
}
171172

173+
/**
174+
* The type Spring doc security o auth 2 configuration.
175+
*/
172176
@Lazy(false)
173177
@Configuration(proxyBeanMethods = false)
174178
@ConditionalOnClass(OAuth2AuthorizationService.class)
@@ -186,4 +190,19 @@ GlobalOpenApiCustomizer springDocSecurityOAuth2Customizer() {
186190
return new SpringDocSecurityOAuth2Customizer();
187191
}
188192
}
193+
194+
/**
195+
* The type Spring doc security o auth 2 client configuration.
196+
*/
197+
@Lazy(false)
198+
@Configuration(proxyBeanMethods = false)
199+
@ConditionalOnClass(RegisteredOAuth2AuthorizedClient.class)
200+
class SpringDocSecurityOAuth2ClientConfiguration {
201+
202+
static {
203+
getConfig()
204+
.addAnnotationsToIgnore(RegisteredOAuth2AuthorizedClient.class);
205+
}
206+
207+
}
189208
}

Diff for: springdoc-openapi-tests/springdoc-openapi-security-tests/pom.xml

+5
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@
2020
<artifactId>spring-security-config</artifactId>
2121
<scope>test</scope>
2222
</dependency>
23+
<dependency>
24+
<groupId>org.springframework.security</groupId>
25+
<artifactId>spring-security-oauth2-client</artifactId>
26+
<scope>test</scope>
27+
</dependency>
2328
<dependency>
2429
<groupId>jakarta.servlet</groupId>
2530
<artifactId>jakarta.servlet-api</artifactId>

Diff for: springdoc-openapi-tests/springdoc-openapi-security-tests/src/test/java/test/org/springdoc/api/app1/HelloController.java

+9
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020

2121
import org.springframework.security.core.annotation.AuthenticationPrincipal;
2222
import org.springframework.security.core.userdetails.User;
23+
import org.springframework.security.oauth2.client.OAuth2AuthorizedClient;
24+
import org.springframework.security.oauth2.client.annotation.RegisteredOAuth2AuthorizedClient;
2325
import org.springframework.web.bind.annotation.PostMapping;
2426
import org.springframework.web.bind.annotation.RequestBody;
2527
import org.springframework.web.bind.annotation.RestController;
@@ -38,4 +40,11 @@ public String personsWithUser(@RequestBody() Person person,
3840
return "OK";
3941
}
4042

43+
@PostMapping(value = "/persons-with-oauth2-user")
44+
public String personsWithUser(@RequestBody() Person person,
45+
@RegisteredOAuth2AuthorizedClient OAuth2AuthorizedClient authorizedClient,
46+
@AuthenticationPrincipal User user) {
47+
return "OK";
48+
}
49+
4150
}

Diff for: springdoc-openapi-tests/springdoc-openapi-security-tests/src/test/resources/results/app1.json

+30
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,36 @@
7474
}
7575
}
7676
}
77+
},
78+
"/persons-with-oauth2-user": {
79+
"post": {
80+
"tags": [
81+
"hello-controller"
82+
],
83+
"operationId": "personsWithUser_1",
84+
"requestBody": {
85+
"content": {
86+
"application/json": {
87+
"schema": {
88+
"$ref": "#/components/schemas/Person"
89+
}
90+
}
91+
},
92+
"required": true
93+
},
94+
"responses": {
95+
"200": {
96+
"description": "OK",
97+
"content": {
98+
"*/*": {
99+
"schema": {
100+
"type": "string"
101+
}
102+
}
103+
}
104+
}
105+
}
106+
}
77107
}
78108
},
79109
"components": {

0 commit comments

Comments
 (0)