Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
S
spring-boot
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
DEMO
spring-boot
Commits
9e9f0067
Commit
9e9f0067
authored
Mar 03, 2017
by
Andy Wilkinson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Polish "Enable customization of RestTemplate that retrieves JwtAccessTokenConverter's key"
See gh-8268 See gh-5859
parent
dc9ff738
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
35 additions
and
30 deletions
+35
-30
JwtAccessTokenConverterRestTemplateCustomizer.java
...source/JwtAccessTokenConverterRestTemplateCustomizer.java
+6
-2
ResourceServerTokenServicesConfiguration.java
...h2/resource/ResourceServerTokenServicesConfiguration.java
+4
-2
ResourceServerTokenServicesConfigurationTests.java
...source/ResourceServerTokenServicesConfigurationTests.java
+25
-26
No files found.
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/oauth2/resource/JwtAccessTokenConverterRestTemplateCustomizer.java
View file @
9e9f0067
...
@@ -16,18 +16,22 @@
...
@@ -16,18 +16,22 @@
package
org
.
springframework
.
boot
.
autoconfigure
.
security
.
oauth2
.
resource
;
package
org
.
springframework
.
boot
.
autoconfigure
.
security
.
oauth2
.
resource
;
import
org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter
;
import
org.springframework.web.client.RestTemplate
;
import
org.springframework.web.client.RestTemplate
;
/**
/**
* Callback for customizing the rest template used to fetch the token key.
* Callback for customizing the {@link RestTemplate} that is used to fetch the keys used
* by {@link JwtAccessTokenConverter}.
*
*
* @author Eddú Meléndez
* @author Eddú Meléndez
* @since 1.5.2
* @since 1.5.2
* @see JwtAccessTokenConverter#setSigningKey(String)
* @see JwtAccessTokenConverter#setVerifierKey(String)
*/
*/
public
interface
JwtAccessTokenConverterRestTemplateCustomizer
{
public
interface
JwtAccessTokenConverterRestTemplateCustomizer
{
/**
/**
* Customize the
rest template
before it is initialized.
* Customize the
{@code template}
before it is initialized.
* @param template the rest template
* @param template the rest template
*/
*/
void
customize
(
RestTemplate
template
);
void
customize
(
RestTemplate
template
);
...
...
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/oauth2/resource/ResourceServerTokenServicesConfiguration.java
View file @
9e9f0067
...
@@ -303,8 +303,10 @@ public class ResourceServerTokenServicesConfiguration {
...
@@ -303,8 +303,10 @@ public class ResourceServerTokenServicesConfiguration {
private
String
getKeyFromServer
()
{
private
String
getKeyFromServer
()
{
RestTemplate
keyUriRestTemplate
=
new
RestTemplate
();
RestTemplate
keyUriRestTemplate
=
new
RestTemplate
();
for
(
JwtAccessTokenConverterRestTemplateCustomizer
customizer
:
this
.
customizers
)
{
if
(!
CollectionUtils
.
isEmpty
(
this
.
customizers
))
{
customizer
.
customize
(
keyUriRestTemplate
);
for
(
JwtAccessTokenConverterRestTemplateCustomizer
customizer
:
this
.
customizers
)
{
customizer
.
customize
(
keyUriRestTemplate
);
}
}
}
HttpHeaders
headers
=
new
HttpHeaders
();
HttpHeaders
headers
=
new
HttpHeaders
();
String
username
=
this
.
resource
.
getClientId
();
String
username
=
this
.
resource
.
getClientId
();
...
...
spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/oauth2/resource/ResourceServerTokenServicesConfigurationTests.java
View file @
9e9f0067
...
@@ -54,12 +54,15 @@ import org.springframework.security.oauth2.client.OAuth2RestTemplate;
...
@@ -54,12 +54,15 @@ import org.springframework.security.oauth2.client.OAuth2RestTemplate;
import
org.springframework.security.oauth2.client.token.grant.code.AuthorizationCodeResourceDetails
;
import
org.springframework.security.oauth2.client.token.grant.code.AuthorizationCodeResourceDetails
;
import
org.springframework.security.oauth2.provider.token.DefaultTokenServices
;
import
org.springframework.security.oauth2.provider.token.DefaultTokenServices
;
import
org.springframework.security.oauth2.provider.token.RemoteTokenServices
;
import
org.springframework.security.oauth2.provider.token.RemoteTokenServices
;
import
org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter
;
import
org.springframework.social.connect.ConnectionFactoryLocator
;
import
org.springframework.social.connect.ConnectionFactoryLocator
;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
import
org.springframework.web.client.RestTemplate
;
import
org.springframework.web.client.RestTemplate
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
import
static
org
.
mockito
.
Matchers
.
any
;
import
static
org
.
mockito
.
Mockito
.
mock
;
import
static
org
.
mockito
.
Mockito
.
mock
;
import
static
org
.
mockito
.
Mockito
.
verify
;
/**
/**
* Tests for {@link ResourceServerTokenServicesConfiguration}.
* Tests for {@link ResourceServerTokenServicesConfiguration}.
...
@@ -243,20 +246,24 @@ public class ResourceServerTokenServicesConfigurationTests {
...
@@ -243,20 +246,24 @@ public class ResourceServerTokenServicesConfigurationTests {
}
}
@Test
@Test
public
void
customRestTemplate
()
{
public
void
jwtAccessTokenConverterIsConfiguredWhenKeyUriIsProvided
()
{
EnvironmentTestUtils
.
addEnvironment
(
this
.
environment
,
EnvironmentTestUtils
.
addEnvironment
(
this
.
environment
,
"security.oauth2.resource.userInfoUri:http://example.com"
,
"security.oauth2.resource.jwt.key-uri=http://localhost:12345/banana"
);
"security.oauth2.resource.tokenInfoUri:http://example.com"
,
this
.
context
=
new
SpringApplicationBuilder
(
ResourceConfiguration
.
class
)
"security.oauth2.resource.preferTokenInfo:false"
);
.
environment
(
this
.
environment
).
web
(
false
).
run
();
assertThat
(
this
.
context
.
getBeansOfType
(
JwtAccessTokenConverter
.
class
)).
hasSize
(
1
);
}
@Test
public
void
jwtAccessTokenConverterRestTemplateCanBeCustomized
()
{
EnvironmentTestUtils
.
addEnvironment
(
this
.
environment
,
"security.oauth2.resource.jwt.key-uri=http://localhost:12345/banana"
);
this
.
context
=
new
SpringApplicationBuilder
(
ResourceConfiguration
.
class
,
this
.
context
=
new
SpringApplicationBuilder
(
ResourceConfiguration
.
class
,
RestTemplateCustomizer
.
class
).
environment
(
this
.
environment
).
web
(
false
)
JwtAccessTokenConverterRestTemplateCustomizerConfiguration
.
class
)
.
run
();
.
environment
(
this
.
environment
).
web
(
false
).
run
();
String
[]
restTemplateCustomizers
=
this
.
context
JwtAccessTokenConverterRestTemplateCustomizer
customizer
=
this
.
context
.
getBeanNamesForType
(
JwtAccessTokenConverterRestTemplateCustomizer
.
class
);
.
getBean
(
JwtAccessTokenConverterRestTemplateCustomizer
.
class
);
UserInfoTokenServices
services
=
this
.
context
verify
(
customizer
).
customize
(
any
(
RestTemplate
.
class
));
.
getBean
(
UserInfoTokenServices
.
class
);
assertThat
(
restTemplateCustomizers
).
hasSize
(
1
);
assertThat
(
services
).
isNotNull
();
}
}
@Configuration
@Configuration
...
@@ -373,22 +380,14 @@ public class ResourceServerTokenServicesConfigurationTests {
...
@@ -373,22 +380,14 @@ public class ResourceServerTokenServicesConfigurationTests {
}
}
@Component
@Configuration
protected
static
class
RestTemplateCustomizer
static
class
JwtAccessTokenConverterRestTemplateCustomizerConfiguration
{
implements
JwtAccessTokenConverterRestTemplateCustomizer
{
@Override
public
void
customize
(
RestTemplate
template
)
{
template
.
getInterceptors
().
add
(
new
ClientHttpRequestInterceptor
()
{
@Override
public
ClientHttpResponse
intercept
(
HttpRequest
request
,
byte
[]
body
,
ClientHttpRequestExecution
execution
)
throws
IOException
{
return
execution
.
execute
(
request
,
body
);
}
});
@Bean
public
JwtAccessTokenConverterRestTemplateCustomizer
restTemplateCustomizer
()
{
return
mock
(
JwtAccessTokenConverterRestTemplateCustomizer
.
class
);
}
}
}
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment