mirror of
https://github.com/spring-projects/spring-security.git
synced 2025-02-26 09:24:53 +00:00
Resource Server Finds JwtAuthenticationConverter Beans
Fixes gh-8185
This commit is contained in:
parent
9a42a028e7
commit
a70d55552b
@ -123,6 +123,7 @@ import static org.springframework.security.oauth2.jwt.NimbusJwtDecoder.withJwkSe
|
|||||||
* </ul>
|
* </ul>
|
||||||
*
|
*
|
||||||
* @author Josh Cummings
|
* @author Josh Cummings
|
||||||
|
* @author Evgeniy Cheban
|
||||||
* @since 5.1
|
* @since 5.1
|
||||||
* @see BearerTokenAuthenticationFilter
|
* @see BearerTokenAuthenticationFilter
|
||||||
* @see JwtAuthenticationProvider
|
* @see JwtAuthenticationProvider
|
||||||
@ -280,8 +281,7 @@ public final class OAuth2ResourceServerConfigurer<H extends HttpSecurityBuilder<
|
|||||||
private AuthenticationManager authenticationManager;
|
private AuthenticationManager authenticationManager;
|
||||||
private JwtDecoder decoder;
|
private JwtDecoder decoder;
|
||||||
|
|
||||||
private Converter<Jwt, ? extends AbstractAuthenticationToken> jwtAuthenticationConverter =
|
private Converter<Jwt, ? extends AbstractAuthenticationToken> jwtAuthenticationConverter;
|
||||||
new JwtAuthenticationConverter();
|
|
||||||
|
|
||||||
JwtConfigurer(ApplicationContext context) {
|
JwtConfigurer(ApplicationContext context) {
|
||||||
this.context = context;
|
this.context = context;
|
||||||
@ -315,6 +315,14 @@ public final class OAuth2ResourceServerConfigurer<H extends HttpSecurityBuilder<
|
|||||||
}
|
}
|
||||||
|
|
||||||
Converter<Jwt, ? extends AbstractAuthenticationToken> getJwtAuthenticationConverter() {
|
Converter<Jwt, ? extends AbstractAuthenticationToken> getJwtAuthenticationConverter() {
|
||||||
|
if (this.jwtAuthenticationConverter == null) {
|
||||||
|
if (this.context.getBeanNamesForType(JwtAuthenticationConverter.class).length > 0) {
|
||||||
|
this.jwtAuthenticationConverter = this.context.getBean(JwtAuthenticationConverter.class);
|
||||||
|
} else {
|
||||||
|
this.jwtAuthenticationConverter = new JwtAuthenticationConverter();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return this.jwtAuthenticationConverter;
|
return this.jwtAuthenticationConverter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -160,6 +160,7 @@ import static org.springframework.web.bind.annotation.RequestMethod.POST;
|
|||||||
* Tests for {@link OAuth2ResourceServerConfigurer}
|
* Tests for {@link OAuth2ResourceServerConfigurer}
|
||||||
*
|
*
|
||||||
* @author Josh Cummings
|
* @author Josh Cummings
|
||||||
|
* @author Evgeniy Cheban
|
||||||
*/
|
*/
|
||||||
public class OAuth2ResourceServerConfigurerTests {
|
public class OAuth2ResourceServerConfigurerTests {
|
||||||
private static final String JWT_TOKEN = "token";
|
private static final String JWT_TOKEN = "token";
|
||||||
@ -1452,6 +1453,80 @@ public class OAuth2ResourceServerConfigurerTests {
|
|||||||
.hasMessageContaining("authenticationManagerResolver");
|
.hasMessageContaining("authenticationManagerResolver");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getJwtAuthenticationConverterWhenNoConverterSpecifiedThenTheDefaultIsUsed() {
|
||||||
|
ApplicationContext context =
|
||||||
|
this.spring.context(new GenericWebApplicationContext()).getContext();
|
||||||
|
|
||||||
|
OAuth2ResourceServerConfigurer.JwtConfigurer jwtConfigurer =
|
||||||
|
new OAuth2ResourceServerConfigurer(context).jwt();
|
||||||
|
|
||||||
|
assertThat(jwtConfigurer.getJwtAuthenticationConverter()).isInstanceOf(JwtAuthenticationConverter.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getJwtAuthenticationConverterWhenConverterBeanSpecified() {
|
||||||
|
JwtAuthenticationConverter converterBean = new JwtAuthenticationConverter();
|
||||||
|
|
||||||
|
GenericWebApplicationContext context = new GenericWebApplicationContext();
|
||||||
|
context.registerBean(JwtAuthenticationConverter.class, () -> converterBean);
|
||||||
|
this.spring.context(context).autowire();
|
||||||
|
|
||||||
|
OAuth2ResourceServerConfigurer.JwtConfigurer jwtConfigurer =
|
||||||
|
new OAuth2ResourceServerConfigurer(context).jwt();
|
||||||
|
|
||||||
|
assertThat(jwtConfigurer.getJwtAuthenticationConverter()).isEqualTo(converterBean);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getJwtAuthenticationConverterWhenConverterBeanAndAnotherOnTheDslThenTheDslOneIsUsed() {
|
||||||
|
JwtAuthenticationConverter converter = new JwtAuthenticationConverter();
|
||||||
|
JwtAuthenticationConverter converterBean = new JwtAuthenticationConverter();
|
||||||
|
|
||||||
|
GenericWebApplicationContext context = new GenericWebApplicationContext();
|
||||||
|
context.registerBean(JwtAuthenticationConverter.class, () -> converterBean);
|
||||||
|
this.spring.context(context).autowire();
|
||||||
|
|
||||||
|
OAuth2ResourceServerConfigurer.JwtConfigurer jwtConfigurer =
|
||||||
|
new OAuth2ResourceServerConfigurer(context).jwt();
|
||||||
|
jwtConfigurer.jwtAuthenticationConverter(converter);
|
||||||
|
|
||||||
|
assertThat(jwtConfigurer.getJwtAuthenticationConverter()).isEqualTo(converter);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getJwtAuthenticationConverterWhenDuplicateConverterBeansAndAnotherOnTheDslThenTheDslOneIsUsed() {
|
||||||
|
JwtAuthenticationConverter converter = new JwtAuthenticationConverter();
|
||||||
|
JwtAuthenticationConverter converterBean = new JwtAuthenticationConverter();
|
||||||
|
|
||||||
|
GenericWebApplicationContext context = new GenericWebApplicationContext();
|
||||||
|
context.registerBean("converterOne", JwtAuthenticationConverter.class, () -> converterBean);
|
||||||
|
context.registerBean("converterTwo", JwtAuthenticationConverter.class, () -> converterBean);
|
||||||
|
this.spring.context(context).autowire();
|
||||||
|
|
||||||
|
OAuth2ResourceServerConfigurer.JwtConfigurer jwtConfigurer =
|
||||||
|
new OAuth2ResourceServerConfigurer(context).jwt();
|
||||||
|
jwtConfigurer.jwtAuthenticationConverter(converter);
|
||||||
|
|
||||||
|
assertThat(jwtConfigurer.getJwtAuthenticationConverter()).isEqualTo(converter);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getJwtAuthenticationConverterWhenDuplicateConverterBeansThenThrowsException() {
|
||||||
|
JwtAuthenticationConverter converterBean = new JwtAuthenticationConverter();
|
||||||
|
|
||||||
|
GenericWebApplicationContext context = new GenericWebApplicationContext();
|
||||||
|
context.registerBean("converterOne", JwtAuthenticationConverter.class, () -> converterBean);
|
||||||
|
context.registerBean("converterTwo", JwtAuthenticationConverter.class, () -> converterBean);
|
||||||
|
this.spring.context(context).autowire();
|
||||||
|
|
||||||
|
OAuth2ResourceServerConfigurer.JwtConfigurer jwtConfigurer =
|
||||||
|
new OAuth2ResourceServerConfigurer(context).jwt();
|
||||||
|
|
||||||
|
assertThatCode(jwtConfigurer::getJwtAuthenticationConverter)
|
||||||
|
.isInstanceOf(NoUniqueBeanDefinitionException.class);
|
||||||
|
}
|
||||||
|
|
||||||
// -- support
|
// -- support
|
||||||
|
|
||||||
@EnableWebSecurity
|
@EnableWebSecurity
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2002-2018 the original author or authors.
|
* Copyright 2002-2020 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user