Skip to content

Commit b1e90b7

Browse files
committed
update samples
1 parent 5f2c89f commit b1e90b7

2 files changed

Lines changed: 84 additions & 16 deletions

File tree

modules/openapi-generator/src/main/resources/kotlin-spring/libraries/spring-cloud/clientConfiguration.mustache

Lines changed: 79 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,14 @@ import feign.auth.BasicAuthRequestInterceptor
88
import org.springframework.beans.factory.annotation.Value
99
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
1010
{{/-first}}
11-
{{^useSpringBoot4}}
12-
{{#isOAuth}}
13-
import org.springframework.boot.context.properties.ConfigurationProperties
14-
{{/isOAuth}}
15-
{{/useSpringBoot4}}
11+
{{^useSpringBoot4}}{{^useSpringBoot3}}{{#isOAuth}}import org.springframework.boot.context.properties.ConfigurationProperties{{/isOAuth}}{{/useSpringBoot3}}{{/useSpringBoot4}}
1612
{{/authMethods}}
17-
{{^useSpringBoot4}}
18-
import org.springframework.boot.context.properties.EnableConfigurationProperties
19-
{{/useSpringBoot4}}
13+
{{^useSpringBoot4}}{{^useSpringBoot3}}import org.springframework.boot.context.properties.EnableConfigurationProperties{{/useSpringBoot3}}{{/useSpringBoot4}}
2014
{{#hasAuthMethods}}
2115
import org.springframework.context.annotation.Bean
2216
{{/hasAuthMethods}}
2317
import org.springframework.context.annotation.Configuration
24-
{{^useSpringBoot4}}
18+
{{^useSpringBoot4}}{{^useSpringBoot3}}
2519
{{#authMethods}}
2620
{{#isOAuth}}
2721
import org.springframework.cloud.openfeign.security.OAuth2FeignRequestInterceptor
@@ -41,7 +35,24 @@ import org.springframework.security.oauth2.client.token.grant.password.ResourceO
4135
{{/isPassword}}
4236
{{/isOAuth}}
4337
{{/authMethods}}
44-
{{/useSpringBoot4}}
38+
{{/useSpringBoot3}}{{/useSpringBoot4}}
39+
{{#useSpringBoot3}}
40+
{{#hasOAuthMethods}}
41+
import org.springframework.security.authentication.AnonymousAuthenticationToken
42+
import org.springframework.security.oauth2.client.AuthorizedClientServiceOAuth2AuthorizedClientManager
43+
import org.springframework.security.oauth2.client.OAuth2AuthorizeRequest
44+
import org.springframework.security.oauth2.client.OAuth2AuthorizedClientManager
45+
import org.springframework.security.oauth2.client.OAuth2AuthorizedClientService
46+
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository
47+
import org.springframework.security.oauth2.core.OAuth2AuthenticationException
48+
import org.springframework.security.oauth2.core.OAuth2AccessToken
49+
import org.springframework.security.core.authority.AuthorityUtils
50+
import org.springframework.http.HttpHeaders
51+
52+
import feign.RequestInterceptor
53+
import feign.RequestTemplate
54+
{{/hasOAuthMethods}}
55+
{{/useSpringBoot3}}
4556
{{#useSpringBoot4}}
4657
{{#hasOAuthMethods}}
4758
import org.springframework.security.authentication.AnonymousAuthenticationToken
@@ -60,10 +71,8 @@ import feign.RequestTemplate
6071
{{/hasOAuthMethods}}
6172
{{/useSpringBoot4}}
6273

63-
@Configuration
64-
{{^useSpringBoot4}}
65-
@EnableConfigurationProperties
66-
{{/useSpringBoot4}}
74+
@Configuration{{^useSpringBoot4}}{{^useSpringBoot3}}
75+
@EnableConfigurationProperties{{/useSpringBoot3}}{{/useSpringBoot4}}
6776
class ClientConfiguration {
6877
6978
{{#authMethods}}
@@ -93,7 +102,7 @@ class ClientConfiguration {
93102

94103
{{/isApiKey}}
95104
{{#isOAuth}}
96-
{{^useSpringBoot4}}
105+
{{^useSpringBoot4}}{{^useSpringBoot3}}
97106
@Bean
98107
@ConditionalOnProperty("{{#lambda.lowercase}}{{{title}}}{{/lambda.lowercase}}.security.{{{name}}}.client-id")
99108
fun {{#lambda.camelcase}}{{{name}}}{{/lambda.camelcase}}RequestInterceptor(oAuth2ClientContext: OAuth2ClientContext): OAuth2FeignRequestInterceptor {
@@ -151,7 +160,29 @@ class ClientConfiguration {
151160
}
152161

153162
{{/isImplicit}}
154-
{{/useSpringBoot4}}
163+
{{/useSpringBoot3}}{{/useSpringBoot4}}
164+
{{#useSpringBoot3}}
165+
@Bean
166+
@ConditionalOnProperty(prefix = "spring.security.oauth2.client.registration.{{{name}}}{{#lambda.pascalcase}}{{{flow}}}{{/lambda.pascalcase}}", name = ["enabled"], havingValue = "true")
167+
fun {{{flow}}}OAuth2RequestInterceptor({{{flow}}}AuthorizedClientManager: OAuth2AuthorizedClientManager): OAuth2RequestInterceptor {
168+
return OAuth2RequestInterceptor(
169+
OAuth2AuthorizeRequest.withClientRegistrationId("{{{name}}}{{#lambda.pascalcase}}{{{flow}}}{{/lambda.pascalcase}}")
170+
.principal(AnonymousAuthenticationToken(CLIENT_PRINCIPAL_{{#lambda.uppercase}}{{{flow}}}{{/lambda.uppercase}}, CLIENT_PRINCIPAL_{{#lambda.uppercase}}{{{flow}}}{{/lambda.uppercase}}, AuthorityUtils.createAuthorityList("ROLE_ANONYMOUS")))
171+
.build(),
172+
{{{flow}}}AuthorizedClientManager
173+
)
174+
}
175+
176+
@Bean
177+
@ConditionalOnProperty(prefix = "spring.security.oauth2.client.registration.{{{name}}}{{#lambda.pascalcase}}{{{flow}}}{{/lambda.pascalcase}}", name = ["enabled"], havingValue = "true")
178+
fun {{{flow}}}AuthorizedClientManager(
179+
clientRegistrationRepository: ClientRegistrationRepository,
180+
authorizedClientService: OAuth2AuthorizedClientService
181+
): OAuth2AuthorizedClientManager {
182+
return AuthorizedClientServiceOAuth2AuthorizedClientManager(clientRegistrationRepository, authorizedClientService)
183+
}
184+
185+
{{/useSpringBoot3}}
155186
{{#useSpringBoot4}}
156187
@Bean
157188
@ConditionalOnProperty(prefix = "spring.security.oauth2.client.registration.{{{name}}}{{#lambda.pascalcase}}{{{flow}}}{{/lambda.pascalcase}}", name = ["enabled"], havingValue = "true")
@@ -176,6 +207,38 @@ class ClientConfiguration {
176207
{{/useSpringBoot4}}
177208
{{/isOAuth}}
178209
{{/authMethods}}
210+
{{#useSpringBoot3}}
211+
{{#hasOAuthMethods}}
212+
class OAuth2RequestInterceptor(
213+
private val oAuth2AuthorizeRequest: OAuth2AuthorizeRequest,
214+
private val oAuth2AuthorizedClientManager: OAuth2AuthorizedClientManager
215+
) : RequestInterceptor {
216+
217+
override fun apply(template: RequestTemplate) {
218+
template.header(HttpHeaders.AUTHORIZATION, getBearerToken())
219+
}
220+
221+
fun getAccessToken(): OAuth2AccessToken {
222+
val authorizedClient = oAuth2AuthorizedClientManager.authorize(oAuth2AuthorizeRequest)
223+
?: throw OAuth2AuthenticationException("Client failed to authenticate")
224+
return authorizedClient.accessToken
225+
}
226+
227+
fun getBearerToken(): String {
228+
val accessToken = getAccessToken()
229+
return String.format(java.util.Locale.ROOT, "%s %s", accessToken.tokenType?.value, accessToken.tokenValue)
230+
}
231+
}
232+
233+
companion object {
234+
{{#authMethods}}
235+
{{#isOAuth}}
236+
private const val CLIENT_PRINCIPAL_{{#lambda.uppercase}}{{{flow}}}{{/lambda.uppercase}} = "oauth2FeignClient"
237+
{{/isOAuth}}
238+
{{/authMethods}}
239+
}
240+
{{/hasOAuthMethods}}
241+
{{/useSpringBoot3}}
179242
{{#useSpringBoot4}}
180243
{{#hasOAuthMethods}}
181244
class OAuth2RequestInterceptor(

samples/server/petstore/kotlin-spring-cloud/src/main/kotlin/org/openapitools/configuration/ClientConfiguration.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,22 @@ package org.openapitools.configuration
33
import org.springframework.beans.factory.annotation.Value
44
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
55
import org.springframework.boot.context.properties.ConfigurationProperties
6+
67
import org.springframework.boot.context.properties.EnableConfigurationProperties
78
import org.springframework.context.annotation.Bean
89
import org.springframework.context.annotation.Configuration
10+
911
import org.springframework.cloud.openfeign.security.OAuth2FeignRequestInterceptor
1012
import org.springframework.security.oauth2.client.DefaultOAuth2ClientContext
1113
import org.springframework.security.oauth2.client.OAuth2ClientContext
1214
import org.springframework.security.oauth2.client.token.grant.implicit.ImplicitResourceDetails
1315

16+
1417
@Configuration
1518
@EnableConfigurationProperties
1619
class ClientConfiguration {
1720

21+
1822
@Bean
1923
@ConditionalOnProperty("openapipetstore.security.petstore_auth.client-id")
2024
fun petstoreAuthRequestInterceptor(oAuth2ClientContext: OAuth2ClientContext): OAuth2FeignRequestInterceptor {
@@ -36,6 +40,7 @@ class ClientConfiguration {
3640
return details
3741
}
3842

43+
3944
@Value("\${openapipetstore.security.api_key.key:}")
4045
private lateinit var apiKeyKey: String
4146

0 commit comments

Comments
 (0)