Skip to content

Commit 7a3d773

Browse files
committed
add support for Spring Authorization Server. Fixes #2094
1 parent 9d6bd00 commit 7a3d773

File tree

14 files changed

+1477
-4
lines changed

14 files changed

+1477
-4
lines changed

pom.xml

+6
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@
8181
<therapi-runtime-javadoc.version>0.15.0</therapi-runtime-javadoc.version>
8282
<spring-cloud-function.version>3.2.4</spring-cloud-function.version>
8383
<dependency-check.version>7.1.0</dependency-check.version>
84+
<spring-security-oauth2-authorization-server.version>1.0.1</spring-security-oauth2-authorization-server.version>
8485
</properties>
8586

8687
<dependencyManagement>
@@ -113,6 +114,11 @@
113114
<artifactId>spring-security-oauth2</artifactId>
114115
<version>${spring-security-oauth2.version}</version>
115116
</dependency>
117+
<dependency>
118+
<groupId>org.springframework.security</groupId>
119+
<artifactId>spring-security-oauth2-authorization-server</artifactId>
120+
<version>${spring-security-oauth2-authorization-server.version}</version>
121+
</dependency>
116122
<dependency>
117123
<groupId>io.github.classgraph</groupId>
118124
<artifactId>classgraph</artifactId>

springdoc-openapi-common/src/main/java/org/springdoc/core/Constants.java

+5
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,11 @@ public final class Constants {
108108
*/
109109
public static final String SPRINGDOC_SHOW_LOGIN_ENDPOINT = "springdoc.show-login-endpoint";
110110

111+
/**
112+
* The constant SPRINGDOC_SHOW_OAUTH2_ENDPOINTS.
113+
*/
114+
public static final String SPRINGDOC_SHOW_OAUTH2_ENDPOINTS = "springdoc.show-oauth2-endpoints";
115+
111116
/**
112117
* The constant SPRINGDOC_CACHE_DISABLED.
113118
*/

springdoc-openapi-common/src/main/java/org/springdoc/core/SpringDocConfigProperties.java

+13
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,11 @@ public class SpringDocConfigProperties {
202202
*/
203203
private boolean nullableRequestParameterEnabled;
204204

205+
/**
206+
* The Show oauth 2 endpoint.
207+
*/
208+
private boolean showOauth2Endpoint;
209+
205210
/**
206211
* Gets override with generic response.
207212
*
@@ -1500,4 +1505,12 @@ public void setDisplayName(String displayName) {
15001505
this.displayName = displayName;
15011506
}
15021507
}
1508+
1509+
public boolean isShowOauth2Endpoint() {
1510+
return showOauth2Endpoint;
1511+
}
1512+
1513+
public void setShowOauth2Endpoint(boolean showOauth2Endpoint) {
1514+
this.showOauth2Endpoint = showOauth2Endpoint;
1515+
}
15031516
}

springdoc-openapi-security/pom.xml

+5
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@
2626
<artifactId>spring-security-oauth2</artifactId>
2727
<optional>true</optional>
2828
</dependency>
29+
<dependency>
30+
<groupId>org.springframework.security</groupId>
31+
<artifactId>spring-security-oauth2-authorization-server</artifactId>
32+
<optional>true</optional>
33+
</dependency>
2934
<dependency>
3035
<groupId>jakarta.servlet</groupId>
3136
<artifactId>jakarta.servlet-api</artifactId>

springdoc-openapi-security/src/main/java/org/springdoc/security/SpringDocSecurityConfiguration.java

+23-2
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import org.slf4j.Logger;
4040
import org.slf4j.LoggerFactory;
4141
import org.springdoc.core.SpringDocConfiguration;
42+
import org.springdoc.core.customizers.GlobalOpenApiCustomizer;
4243
import org.springdoc.core.customizers.OpenApiCustomiser;
4344

4445
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
@@ -53,6 +54,7 @@
5354
import org.springframework.security.core.Authentication;
5455
import org.springframework.security.core.annotation.AuthenticationPrincipal;
5556
import org.springframework.security.oauth2.provider.endpoint.FrameworkEndpointHandlerMapping;
57+
import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService;
5658
import org.springframework.security.web.FilterChainProxy;
5759
import org.springframework.security.web.SecurityFilterChain;
5860
import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter;
@@ -63,6 +65,7 @@
6365

6466
import static org.springdoc.core.Constants.SPRINGDOC_ENABLED;
6567
import static org.springdoc.core.Constants.SPRINGDOC_SHOW_LOGIN_ENDPOINT;
68+
import static org.springdoc.core.Constants.SPRINGDOC_SHOW_OAUTH2_ENDPOINTS;
6669
import static org.springdoc.core.SpringDocUtils.getConfig;
6770

6871
/**
@@ -103,8 +106,8 @@ class SpringSecurityOAuth2ProviderConfiguration {
103106
@Bean
104107
@ConditionalOnMissingBean
105108
@Lazy(false)
106-
SpringSecurityOAuth2Provider springSecurityOAuth2Provider(FrameworkEndpointHandlerMapping oauth2EndpointHandlerMapping) {
107-
return new SpringSecurityOAuth2Provider(oauth2EndpointHandlerMapping);
109+
SpringSecurityOAuth2LegacyProvider springSecurityOAuth2Provider(FrameworkEndpointHandlerMapping oauth2EndpointHandlerMapping) {
110+
return new SpringSecurityOAuth2LegacyProvider(oauth2EndpointHandlerMapping);
108111
}
109112
}
110113

@@ -184,4 +187,22 @@ OpenApiCustomiser springSecurityLoginEndpointCustomiser(ApplicationContext appli
184187
};
185188
}
186189
}
190+
191+
@Lazy(false)
192+
@Configuration(proxyBeanMethods = false)
193+
@ConditionalOnClass(OAuth2AuthorizationService.class)
194+
class SpringDocSecurityOAuth2Configuration {
195+
196+
/**
197+
* Spring security OAuth2 endpoint OpenAPI customizer.
198+
*
199+
* @return the open api customizer
200+
*/
201+
@Bean
202+
@ConditionalOnProperty(SPRINGDOC_SHOW_OAUTH2_ENDPOINTS)
203+
@Lazy(false)
204+
GlobalOpenApiCustomizer springDocSecurityOAuth2Customizer() {
205+
return new SpringDocSecurityOAuth2Customizer();
206+
}
207+
}
187208
}

0 commit comments

Comments
 (0)