Align reactive auto-configuration names

Rename a few reactive auto-configuration and related classes for better
consistency.
This commit is contained in:
Phillip Webb
2025-06-13 13:40:34 -07:00
parent 2ddca76076
commit d7f6a459c2
34 changed files with 119 additions and 127 deletions

View File

@@ -79,7 +79,7 @@ import org.springframework.web.server.WebFilter;
@ConditionalOnBooleanProperty(name = "management.cloudfoundry.enabled", matchIfMissing = true)
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.REACTIVE)
@ConditionalOnCloudPlatform(CloudPlatform.CLOUD_FOUNDRY)
public class ReactiveCloudFoundryActuatorAutoConfiguration {
public class CloudFoundryReactiveActuatorAutoConfiguration {
private static final String BASE_PATH = "/cloudfoundryapplication";
@@ -115,7 +115,7 @@ public class ReactiveCloudFoundryActuatorAutoConfiguration {
CloudFoundryWebEndpointDiscoverer endpointDiscoverer = new CloudFoundryWebEndpointDiscoverer(applicationContext,
parameterMapper, endpointMediaTypes, null, Collections.emptyList(), Collections.emptyList(),
Collections.emptyList());
CloudFoundrySecurityInterceptor securityInterceptor = getSecurityInterceptor(webClientBuilder,
SecurityInterceptor securityInterceptor = getSecurityInterceptor(webClientBuilder,
applicationContext.getEnvironment());
Collection<ExposableWebEndpoint> webEndpoints = endpointDiscoverer.getEndpoints();
List<ExposableEndpoint<?>> allEndpoints = new ArrayList<>();
@@ -125,23 +125,20 @@ public class ReactiveCloudFoundryActuatorAutoConfiguration {
endpointMediaTypes, getCorsConfiguration(), securityInterceptor, allEndpoints);
}
private CloudFoundrySecurityInterceptor getSecurityInterceptor(WebClient.Builder webClientBuilder,
Environment environment) {
ReactiveCloudFoundrySecurityService cloudfoundrySecurityService = getCloudFoundrySecurityService(
webClientBuilder, environment);
ReactiveTokenValidator tokenValidator = new ReactiveTokenValidator(cloudfoundrySecurityService);
return new CloudFoundrySecurityInterceptor(tokenValidator, cloudfoundrySecurityService,
private SecurityInterceptor getSecurityInterceptor(WebClient.Builder webClientBuilder, Environment environment) {
SecurityService cloudfoundrySecurityService = getCloudFoundrySecurityService(webClientBuilder, environment);
TokenValidator tokenValidator = new TokenValidator(cloudfoundrySecurityService);
return new SecurityInterceptor(tokenValidator, cloudfoundrySecurityService,
environment.getProperty("vcap.application.application_id"));
}
private ReactiveCloudFoundrySecurityService getCloudFoundrySecurityService(WebClient.Builder webClientBuilder,
private SecurityService getCloudFoundrySecurityService(WebClient.Builder webClientBuilder,
Environment environment) {
String cloudControllerUrl = environment.getProperty("vcap.application.cf_api");
boolean skipSslValidation = environment.getProperty("management.cloudfoundry.skip-ssl-validation",
Boolean.class, false);
return (cloudControllerUrl != null)
? new ReactiveCloudFoundrySecurityService(webClientBuilder, cloudControllerUrl, skipSslValidation)
: null;
? new SecurityService(webClientBuilder, cloudControllerUrl, skipSslValidation) : null;
}
private CorsConfiguration getCorsConfiguration() {

View File

@@ -61,7 +61,7 @@ import org.springframework.web.server.ServerWebExchange;
@ImportRuntimeHints(CloudFoundryWebFluxEndpointHandlerMappingRuntimeHints.class)
class CloudFoundryWebFluxEndpointHandlerMapping extends AbstractWebFluxEndpointHandlerMapping {
private final CloudFoundrySecurityInterceptor securityInterceptor;
private final SecurityInterceptor securityInterceptor;
private final EndpointLinksResolver linksResolver;
@@ -69,7 +69,7 @@ class CloudFoundryWebFluxEndpointHandlerMapping extends AbstractWebFluxEndpointH
CloudFoundryWebFluxEndpointHandlerMapping(EndpointMapping endpointMapping,
Collection<ExposableWebEndpoint> endpoints, EndpointMediaTypes endpointMediaTypes,
CorsConfiguration corsConfiguration, CloudFoundrySecurityInterceptor securityInterceptor,
CorsConfiguration corsConfiguration, SecurityInterceptor securityInterceptor,
Collection<ExposableEndpoint<?>> allEndpoints) {
super(endpointMapping, endpoints, endpointMediaTypes, corsConfiguration, true);
this.linksResolver = new EndpointLinksResolver(allEndpoints);
@@ -135,11 +135,11 @@ class CloudFoundryWebFluxEndpointHandlerMapping extends AbstractWebFluxEndpointH
private final ReactiveWebOperation delegate;
private final CloudFoundrySecurityInterceptor securityInterceptor;
private final SecurityInterceptor securityInterceptor;
private final EndpointId endpointId;
SecureReactiveWebOperation(ReactiveWebOperation delegate, CloudFoundrySecurityInterceptor securityInterceptor,
SecureReactiveWebOperation(ReactiveWebOperation delegate, SecurityInterceptor securityInterceptor,
EndpointId endpointId) {
this.delegate = delegate;
this.securityInterceptor = securityInterceptor;

View File

@@ -37,20 +37,20 @@ import org.springframework.web.server.ServerWebExchange;
*
* @author Madhura Bhave
*/
class CloudFoundrySecurityInterceptor {
class SecurityInterceptor {
private static final Log logger = LogFactory.getLog(CloudFoundrySecurityInterceptor.class);
private static final Log logger = LogFactory.getLog(SecurityInterceptor.class);
private final ReactiveTokenValidator tokenValidator;
private final TokenValidator tokenValidator;
private final ReactiveCloudFoundrySecurityService cloudFoundrySecurityService;
private final SecurityService cloudFoundrySecurityService;
private final String applicationId;
private static final Mono<SecurityResponse> SUCCESS = Mono.just(SecurityResponse.success());
CloudFoundrySecurityInterceptor(ReactiveTokenValidator tokenValidator,
ReactiveCloudFoundrySecurityService cloudFoundrySecurityService, String applicationId) {
SecurityInterceptor(TokenValidator tokenValidator, SecurityService cloudFoundrySecurityService,
String applicationId) {
this.tokenValidator = tokenValidator;
this.cloudFoundrySecurityService = cloudFoundrySecurityService;
this.applicationId = applicationId;

View File

@@ -45,7 +45,7 @@ import org.springframework.web.reactive.function.client.WebClientResponseExcepti
*
* @author Madhura Bhave
*/
class ReactiveCloudFoundrySecurityService {
class SecurityService {
private static final ParameterizedTypeReference<Map<String, Object>> STRING_OBJECT_MAP = new ParameterizedTypeReference<>() {
};
@@ -54,8 +54,7 @@ class ReactiveCloudFoundrySecurityService {
private final String cloudControllerUrl;
ReactiveCloudFoundrySecurityService(WebClient.Builder webClientBuilder, String cloudControllerUrl,
boolean skipSslValidation) {
SecurityService(WebClient.Builder webClientBuilder, String cloudControllerUrl, boolean skipSslValidation) {
Assert.notNull(webClientBuilder, "'webClientBuilder' must not be null");
Assert.notNull(cloudControllerUrl, "'cloudControllerUrl' must not be null");
if (skipSslValidation) {

View File

@@ -39,13 +39,13 @@ import org.springframework.boot.cloudfoundry.actuate.autoconfigure.endpoint.Toke
*
* @author Madhura Bhave
*/
class ReactiveTokenValidator {
class TokenValidator {
private final ReactiveCloudFoundrySecurityService securityService;
private final SecurityService securityService;
private volatile Map<String, String> cachedTokenKeys = Collections.emptyMap();
ReactiveTokenValidator(ReactiveCloudFoundrySecurityService securityService) {
TokenValidator(SecurityService securityService) {
this.securityService = securityService;
}

View File

@@ -119,7 +119,7 @@ public class CloudFoundryActuatorAutoConfiguration {
CloudFoundryWebEndpointDiscoverer discoverer = new CloudFoundryWebEndpointDiscoverer(applicationContext,
parameterMapper, endpointMediaTypes, null, Collections.emptyList(), Collections.emptyList(),
Collections.emptyList());
CloudFoundrySecurityInterceptor securityInterceptor = getSecurityInterceptor(restTemplateBuilder,
SecurityInterceptor securityInterceptor = getSecurityInterceptor(restTemplateBuilder,
applicationContext.getEnvironment());
Collection<ExposableWebEndpoint> webEndpoints = discoverer.getEndpoints();
List<ExposableEndpoint<?>> allEndpoints = new ArrayList<>();
@@ -130,22 +130,21 @@ public class CloudFoundryActuatorAutoConfiguration {
endpointMediaTypes, getCorsConfiguration(), securityInterceptor, allEndpoints);
}
private CloudFoundrySecurityInterceptor getSecurityInterceptor(RestTemplateBuilder restTemplateBuilder,
private SecurityInterceptor getSecurityInterceptor(RestTemplateBuilder restTemplateBuilder,
Environment environment) {
CloudFoundrySecurityService cloudfoundrySecurityService = getCloudFoundrySecurityService(restTemplateBuilder,
environment);
SecurityService cloudfoundrySecurityService = getCloudFoundrySecurityService(restTemplateBuilder, environment);
TokenValidator tokenValidator = new TokenValidator(cloudfoundrySecurityService);
return new CloudFoundrySecurityInterceptor(tokenValidator, cloudfoundrySecurityService,
return new SecurityInterceptor(tokenValidator, cloudfoundrySecurityService,
environment.getProperty("vcap.application.application_id"));
}
private CloudFoundrySecurityService getCloudFoundrySecurityService(RestTemplateBuilder restTemplateBuilder,
private SecurityService getCloudFoundrySecurityService(RestTemplateBuilder restTemplateBuilder,
Environment environment) {
String cloudControllerUrl = environment.getProperty("vcap.application.cf_api");
boolean skipSslValidation = environment.getProperty("management.cloudfoundry.skip-ssl-validation",
Boolean.class, false);
return (cloudControllerUrl != null)
? new CloudFoundrySecurityService(restTemplateBuilder, cloudControllerUrl, skipSslValidation) : null;
? new SecurityService(restTemplateBuilder, cloudControllerUrl, skipSslValidation) : null;
}
private CorsConfiguration getCorsConfiguration() {

View File

@@ -64,7 +64,7 @@ class CloudFoundryWebEndpointServletHandlerMapping extends AbstractWebMvcEndpoin
private static final Log logger = LogFactory.getLog(CloudFoundryWebEndpointServletHandlerMapping.class);
private final CloudFoundrySecurityInterceptor securityInterceptor;
private final SecurityInterceptor securityInterceptor;
private final EndpointLinksResolver linksResolver;
@@ -72,7 +72,7 @@ class CloudFoundryWebEndpointServletHandlerMapping extends AbstractWebMvcEndpoin
CloudFoundryWebEndpointServletHandlerMapping(EndpointMapping endpointMapping,
Collection<ExposableWebEndpoint> endpoints, EndpointMediaTypes endpointMediaTypes,
CorsConfiguration corsConfiguration, CloudFoundrySecurityInterceptor securityInterceptor,
CorsConfiguration corsConfiguration, SecurityInterceptor securityInterceptor,
Collection<ExposableEndpoint<?>> allEndpoints) {
super(endpointMapping, endpoints, endpointMediaTypes, corsConfiguration, true);
this.securityInterceptor = securityInterceptor;
@@ -143,11 +143,11 @@ class CloudFoundryWebEndpointServletHandlerMapping extends AbstractWebMvcEndpoin
private final ServletWebOperation delegate;
private final CloudFoundrySecurityInterceptor securityInterceptor;
private final SecurityInterceptor securityInterceptor;
private final EndpointId endpointId;
SecureServletWebOperation(ServletWebOperation delegate, CloudFoundrySecurityInterceptor securityInterceptor,
SecureServletWebOperation(ServletWebOperation delegate, SecurityInterceptor securityInterceptor,
EndpointId endpointId) {
this.delegate = delegate;
this.securityInterceptor = securityInterceptor;

View File

@@ -38,20 +38,20 @@ import org.springframework.web.cors.CorsUtils;
*
* @author Madhura Bhave
*/
class CloudFoundrySecurityInterceptor {
class SecurityInterceptor {
private static final Log logger = LogFactory.getLog(CloudFoundrySecurityInterceptor.class);
private static final Log logger = LogFactory.getLog(SecurityInterceptor.class);
private final TokenValidator tokenValidator;
private final CloudFoundrySecurityService cloudFoundrySecurityService;
private final SecurityService cloudFoundrySecurityService;
private final String applicationId;
private static final SecurityResponse SUCCESS = SecurityResponse.success();
CloudFoundrySecurityInterceptor(TokenValidator tokenValidator,
CloudFoundrySecurityService cloudFoundrySecurityService, String applicationId) {
SecurityInterceptor(TokenValidator tokenValidator, SecurityService cloudFoundrySecurityService,
String applicationId) {
this.tokenValidator = tokenValidator;
this.cloudFoundrySecurityService = cloudFoundrySecurityService;
this.applicationId = applicationId;

View File

@@ -39,7 +39,7 @@ import org.springframework.web.client.RestTemplate;
*
* @author Madhura Bhave
*/
class CloudFoundrySecurityService {
class SecurityService {
private final RestTemplate restTemplate;
@@ -47,8 +47,7 @@ class CloudFoundrySecurityService {
private String uaaUrl;
CloudFoundrySecurityService(RestTemplateBuilder restTemplateBuilder, String cloudControllerUrl,
boolean skipSslValidation) {
SecurityService(RestTemplateBuilder restTemplateBuilder, String cloudControllerUrl, boolean skipSslValidation) {
Assert.notNull(restTemplateBuilder, "'restTemplateBuilder' must not be null");
Assert.notNull(cloudControllerUrl, "'cloudControllerUrl' must not be null");
if (skipSslValidation) {

View File

@@ -38,11 +38,11 @@ import org.springframework.boot.cloudfoundry.actuate.autoconfigure.endpoint.Toke
*/
class TokenValidator {
private final CloudFoundrySecurityService securityService;
private final SecurityService securityService;
private Map<String, String> tokenKeys;
TokenValidator(CloudFoundrySecurityService cloudFoundrySecurityService) {
TokenValidator(SecurityService cloudFoundrySecurityService) {
this.securityService = cloudFoundrySecurityService;
}

View File

@@ -1,2 +1,2 @@
org.springframework.boot.cloudfoundry.actuate.autoconfigure.endpoint.reactive.ReactiveCloudFoundryActuatorAutoConfiguration
org.springframework.boot.cloudfoundry.actuate.autoconfigure.endpoint.reactive.CloudFoundryReactiveActuatorAutoConfiguration
org.springframework.boot.cloudfoundry.actuate.autoconfigure.endpoint.servlet.CloudFoundryActuatorAutoConfiguration

View File

@@ -83,12 +83,12 @@ import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
import static org.mockito.Mockito.mock;
/**
* Tests for {@link ReactiveCloudFoundryActuatorAutoConfiguration}.
* Tests for {@link CloudFoundryReactiveActuatorAutoConfiguration}.
*
* @author Madhura Bhave
* @author Moritz Halbritter
*/
class ReactiveCloudFoundryActuatorAutoConfigurationTests {
class CloudFoundryReactiveActuatorAutoConfigurationTests {
private static final String V2_JSON = ApiVersion.V2.getProducedMimeType().toString();
@@ -103,7 +103,7 @@ class ReactiveCloudFoundryActuatorAutoConfigurationTests {
EndpointAutoConfiguration.class, WebEndpointAutoConfiguration.class,
HealthContributorAutoConfiguration.class, HealthEndpointAutoConfiguration.class,
InfoContributorAutoConfiguration.class, InfoEndpointAutoConfiguration.class,
ProjectInfoAutoConfiguration.class, ReactiveCloudFoundryActuatorAutoConfiguration.class))
ProjectInfoAutoConfiguration.class, CloudFoundryReactiveActuatorAutoConfiguration.class))
.withUserConfiguration(UserDetailsServiceConfiguration.class);
private static final String BASE_PATH = "/cloudfoundryapplication";

View File

@@ -57,11 +57,11 @@ class CloudFoundryReactiveHealthEndpointWebExtensionTests {
.withConfiguration(AutoConfigurations.of(ReactiveSecurityAutoConfiguration.class,
WebFluxAutoConfiguration.class, JacksonAutoConfiguration.class,
HttpMessageConvertersAutoConfiguration.class, PropertyPlaceholderAutoConfiguration.class,
ReactiveCloudFoundryActuatorAutoConfigurationTests.WebClientCustomizerConfig.class,
CloudFoundryReactiveActuatorAutoConfigurationTests.WebClientCustomizerConfig.class,
WebClientAutoConfiguration.class, ManagementContextAutoConfiguration.class,
EndpointAutoConfiguration.class, WebEndpointAutoConfiguration.class,
HealthContributorAutoConfiguration.class, HealthEndpointAutoConfiguration.class,
ReactiveCloudFoundryActuatorAutoConfiguration.class))
CloudFoundryReactiveActuatorAutoConfiguration.class))
.withUserConfiguration(TestHealthIndicator.class, UserDetailsServiceConfiguration.class);
@Test

View File

@@ -75,17 +75,17 @@ import static org.mockito.Mockito.mock;
*/
class CloudFoundryWebFluxEndpointIntegrationTests {
private final ReactiveTokenValidator tokenValidator = mock(ReactiveTokenValidator.class);
private final TokenValidator tokenValidator = mock(TokenValidator.class);
private final ReactiveCloudFoundrySecurityService securityService = mock(ReactiveCloudFoundrySecurityService.class);
private final SecurityService securityService = mock(SecurityService.class);
private final ReactiveWebApplicationContextRunner contextRunner = new ReactiveWebApplicationContextRunner(
AnnotationConfigReactiveWebServerApplicationContext::new)
.withConfiguration(AutoConfigurations.of(WebFluxAutoConfiguration.class, HttpHandlerAutoConfiguration.class,
NettyReactiveWebServerAutoConfiguration.class))
.withUserConfiguration(TestEndpointConfiguration.class)
.withBean(ReactiveTokenValidator.class, () -> this.tokenValidator)
.withBean(ReactiveCloudFoundrySecurityService.class, () -> this.securityService)
.withBean(TokenValidator.class, () -> this.tokenValidator)
.withBean(SecurityService.class, () -> this.securityService)
.withPropertyValues("server.port=0");
@Test
@@ -233,9 +233,8 @@ class CloudFoundryWebFluxEndpointIntegrationTests {
static class CloudFoundryReactiveConfiguration {
@Bean
CloudFoundrySecurityInterceptor interceptor(ReactiveTokenValidator tokenValidator,
ReactiveCloudFoundrySecurityService securityService) {
return new CloudFoundrySecurityInterceptor(tokenValidator, securityService, "app-id");
SecurityInterceptor interceptor(TokenValidator tokenValidator, SecurityService securityService) {
return new SecurityInterceptor(tokenValidator, securityService, "app-id");
}
@Bean
@@ -247,7 +246,7 @@ class CloudFoundryWebFluxEndpointIntegrationTests {
@Bean
CloudFoundryWebFluxEndpointHandlerMapping cloudFoundryWebEndpointServletHandlerMapping(
WebEndpointDiscoverer webEndpointDiscoverer, EndpointMediaTypes endpointMediaTypes,
CloudFoundrySecurityInterceptor interceptor) {
SecurityInterceptor interceptor) {
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.setAllowedOrigins(Arrays.asList("https://example.com"));
corsConfiguration.setAllowedMethods(Arrays.asList("GET", "POST"));

View File

@@ -40,24 +40,24 @@ import static org.mockito.ArgumentMatchers.any;
import static org.mockito.BDDMockito.given;
/**
* Tests for {@link CloudFoundrySecurityInterceptor}.
* Tests for {@link SecurityInterceptor}.
*
* @author Madhura Bhave
*/
@ExtendWith(MockitoExtension.class)
class ReactiveCloudFoundrySecurityInterceptorTests {
class SecurityInterceptorTests {
@Mock
private ReactiveTokenValidator tokenValidator;
private TokenValidator tokenValidator;
@Mock
private ReactiveCloudFoundrySecurityService securityService;
private SecurityService securityService;
private CloudFoundrySecurityInterceptor interceptor;
private SecurityInterceptor interceptor;
@BeforeEach
void setup() {
this.interceptor = new CloudFoundrySecurityInterceptor(this.tokenValidator, this.securityService, "my-app-id");
this.interceptor = new SecurityInterceptor(this.tokenValidator, this.securityService, "my-app-id");
}
@Test
@@ -95,7 +95,7 @@ class ReactiveCloudFoundrySecurityInterceptorTests {
@Test
void preHandleWhenApplicationIdIsNullShouldReturnError() {
this.interceptor = new CloudFoundrySecurityInterceptor(this.tokenValidator, this.securityService, null);
this.interceptor = new SecurityInterceptor(this.tokenValidator, this.securityService, null);
MockServerWebExchange request = MockServerWebExchange.from(MockServerHttpRequest.get("/a")
.header(HttpHeaders.AUTHORIZATION, "bearer " + mockAccessToken())
.build());
@@ -107,7 +107,7 @@ class ReactiveCloudFoundrySecurityInterceptorTests {
@Test
void preHandleWhenCloudFoundrySecurityServiceIsNullShouldReturnError() {
this.interceptor = new CloudFoundrySecurityInterceptor(this.tokenValidator, null, "my-app-id");
this.interceptor = new SecurityInterceptor(this.tokenValidator, null, "my-app-id");
MockServerWebExchange request = MockServerWebExchange
.from(MockServerHttpRequest.get("/a").header(HttpHeaders.AUTHORIZATION, mockAccessToken()).build());
StepVerifier.create(this.interceptor.preHandle(request, "/a"))

View File

@@ -35,11 +35,11 @@ import org.springframework.web.reactive.function.client.WebClient;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests for {@link ReactiveCloudFoundrySecurityService}.
* Tests for {@link SecurityService}.
*
* @author Madhura Bhave
*/
class ReactiveCloudFoundrySecurityServiceTests {
class SecurityServiceTests {
private static final String CLOUD_CONTROLLER = "/my-cloud-controller.com";
@@ -47,7 +47,7 @@ class ReactiveCloudFoundrySecurityServiceTests {
private static final String UAA_URL = "https://my-cloud-controller.com/uaa";
private ReactiveCloudFoundrySecurityService securityService;
private SecurityService securityService;
private MockWebServer server;
@@ -55,7 +55,7 @@ class ReactiveCloudFoundrySecurityServiceTests {
void setup() {
this.server = new MockWebServer();
WebClient.Builder builder = WebClient.builder().baseUrl(this.server.url("/").toString());
this.securityService = new ReactiveCloudFoundrySecurityService(builder, CLOUD_CONTROLLER, false);
this.securityService = new SecurityService(builder, CLOUD_CONTROLLER, false);
}
@AfterEach

View File

@@ -50,19 +50,19 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.BDDMockito.given;
/**
* Tests for {@link ReactiveTokenValidator}.
* Tests for {@link TokenValidator}.
*
* @author Madhura Bhave
*/
@ExtendWith(MockitoExtension.class)
class ReactiveTokenValidatorTests {
class TokenValidatorTests {
private static final byte[] DOT = ".".getBytes();
@Mock
private ReactiveCloudFoundrySecurityService securityService;
private SecurityService securityService;
private ReactiveTokenValidator tokenValidator;
private TokenValidator tokenValidator;
private static final String VALID_KEY = """
-----BEGIN PUBLIC KEY-----
@@ -94,7 +94,7 @@ class ReactiveTokenValidatorTests {
void setup() {
VALID_KEYS.put("valid-key", VALID_KEY);
INVALID_KEYS.put("invalid-key", INVALID_KEY);
this.tokenValidator = new ReactiveTokenValidator(this.securityService);
this.tokenValidator = new TokenValidator(this.securityService);
}
@Test

View File

@@ -73,7 +73,7 @@ class CloudFoundryMvcWebEndpointIntegrationTests {
private final TokenValidator tokenValidator = mock(TokenValidator.class);
private final CloudFoundrySecurityService securityService = mock(CloudFoundrySecurityService.class);
private final SecurityService securityService = mock(SecurityService.class);
@Test
void operationWithSecurityInterceptorForbidden() {
@@ -204,7 +204,7 @@ class CloudFoundryMvcWebEndpointIntegrationTests {
new WebApplicationContextRunner(AnnotationConfigServletWebServerApplicationContext::new)
.withUserConfiguration(configuration, CloudFoundryMvcConfiguration.class)
.withBean(TokenValidator.class, () -> this.tokenValidator)
.withBean(CloudFoundrySecurityService.class, () -> this.securityService)
.withBean(SecurityService.class, () -> this.securityService)
.run((context) -> consumer.accept(context, WebTestClient.bindToServer()
.baseUrl("http://localhost:" + getPort(
(AnnotationConfigServletWebServerApplicationContext) context.getSourceApplicationContext()))
@@ -227,9 +227,8 @@ class CloudFoundryMvcWebEndpointIntegrationTests {
static class CloudFoundryMvcConfiguration {
@Bean
CloudFoundrySecurityInterceptor interceptor(TokenValidator tokenValidator,
CloudFoundrySecurityService securityService) {
return new CloudFoundrySecurityInterceptor(tokenValidator, securityService, "app-id");
SecurityInterceptor interceptor(TokenValidator tokenValidator, SecurityService securityService) {
return new SecurityInterceptor(tokenValidator, securityService, "app-id");
}
@Bean
@@ -241,7 +240,7 @@ class CloudFoundryMvcWebEndpointIntegrationTests {
@Bean
CloudFoundryWebEndpointServletHandlerMapping cloudFoundryWebEndpointServletHandlerMapping(
WebEndpointDiscoverer webEndpointDiscoverer, EndpointMediaTypes endpointMediaTypes,
CloudFoundrySecurityInterceptor interceptor) {
SecurityInterceptor interceptor) {
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.setAllowedOrigins(Arrays.asList("https://example.com"));
corsConfiguration.setAllowedMethods(Arrays.asList("GET", "POST"));

View File

@@ -38,26 +38,26 @@ import static org.mockito.BDDMockito.given;
import static org.mockito.BDDMockito.then;
/**
* Tests for {@link CloudFoundrySecurityInterceptor}.
* Tests for {@link SecurityInterceptor}.
*
* @author Madhura Bhave
*/
@ExtendWith(MockitoExtension.class)
class CloudFoundrySecurityInterceptorTests {
class SecurityInterceptorTests {
@Mock
private TokenValidator tokenValidator;
@Mock
private CloudFoundrySecurityService securityService;
private SecurityService securityService;
private CloudFoundrySecurityInterceptor interceptor;
private SecurityInterceptor interceptor;
private MockHttpServletRequest request;
@BeforeEach
void setup() {
this.interceptor = new CloudFoundrySecurityInterceptor(this.tokenValidator, this.securityService, "my-app-id");
this.interceptor = new SecurityInterceptor(this.tokenValidator, this.securityService, "my-app-id");
this.request = new MockHttpServletRequest();
}
@@ -85,7 +85,7 @@ class CloudFoundrySecurityInterceptorTests {
@Test
void preHandleWhenApplicationIdIsNullShouldReturnFalse() {
this.interceptor = new CloudFoundrySecurityInterceptor(this.tokenValidator, this.securityService, null);
this.interceptor = new SecurityInterceptor(this.tokenValidator, this.securityService, null);
this.request.addHeader("Authorization", "bearer " + mockAccessToken());
SecurityResponse response = this.interceptor.preHandle(this.request, EndpointId.of("test"));
assertThat(response.getStatus()).isEqualTo(Reason.SERVICE_UNAVAILABLE.getStatus());
@@ -93,7 +93,7 @@ class CloudFoundrySecurityInterceptorTests {
@Test
void preHandleWhenCloudFoundrySecurityServiceIsNullShouldReturnFalse() {
this.interceptor = new CloudFoundrySecurityInterceptor(this.tokenValidator, null, "my-app-id");
this.interceptor = new SecurityInterceptor(this.tokenValidator, null, "my-app-id");
this.request.addHeader("Authorization", "bearer " + mockAccessToken());
SecurityResponse response = this.interceptor.preHandle(this.request, EndpointId.of("test"));
assertThat(response.getStatus()).isEqualTo(Reason.SERVICE_UNAVAILABLE.getStatus());

View File

@@ -43,11 +43,11 @@ import static org.springframework.test.web.client.response.MockRestResponseCreat
import static org.springframework.test.web.client.response.MockRestResponseCreators.withUnauthorizedRequest;
/**
* Tests for {@link CloudFoundrySecurityService}.
* Tests for {@link SecurityService}.
*
* @author Madhura Bhave
*/
class CloudFoundrySecurityServiceTests {
class SecurityServiceTests {
private static final String CLOUD_CONTROLLER = "https://my-cloud-controller.com";
@@ -55,7 +55,7 @@ class CloudFoundrySecurityServiceTests {
private static final String UAA_URL = "https://my-uaa.com";
private CloudFoundrySecurityService securityService;
private SecurityService securityService;
private MockRestServiceServer server;
@@ -63,14 +63,14 @@ class CloudFoundrySecurityServiceTests {
void setup() {
MockServerRestTemplateCustomizer mockServerCustomizer = new MockServerRestTemplateCustomizer();
RestTemplateBuilder builder = new RestTemplateBuilder(mockServerCustomizer);
this.securityService = new CloudFoundrySecurityService(builder, CLOUD_CONTROLLER, false);
this.securityService = new SecurityService(builder, CLOUD_CONTROLLER, false);
this.server = mockServerCustomizer.getServer();
}
@Test
void skipSslValidationWhenTrue() {
RestTemplateBuilder builder = new RestTemplateBuilder();
this.securityService = new CloudFoundrySecurityService(builder, CLOUD_CONTROLLER, true);
this.securityService = new SecurityService(builder, CLOUD_CONTROLLER, true);
RestTemplate restTemplate = (RestTemplate) ReflectionTestUtils.getField(this.securityService, "restTemplate");
assertThat(restTemplate.getRequestFactory()).isInstanceOf(SkipSslVerificationHttpRequestFactory.class);
}
@@ -78,7 +78,7 @@ class CloudFoundrySecurityServiceTests {
@Test
void doNotSkipSslValidationWhenFalse() {
RestTemplateBuilder builder = new RestTemplateBuilder();
this.securityService = new CloudFoundrySecurityService(builder, CLOUD_CONTROLLER, false);
this.securityService = new SecurityService(builder, CLOUD_CONTROLLER, false);
RestTemplate restTemplate = (RestTemplate) ReflectionTestUtils.getField(this.securityService, "restTemplate");
assertThat(restTemplate.getRequestFactory()).isNotInstanceOf(SkipSslVerificationHttpRequestFactory.class);
}

View File

@@ -59,7 +59,7 @@ class TokenValidatorTests {
private static final byte[] DOT = ".".getBytes();
@Mock
private CloudFoundrySecurityService securityService;
private SecurityService securityService;
private TokenValidator tokenValidator;

View File

@@ -28,8 +28,8 @@ import org.springframework.boot.data.elasticsearch.domain.city.City;
import org.springframework.boot.data.elasticsearch.domain.city.ReactiveCityRepository;
import org.springframework.boot.data.elasticsearch.domain.empty.EmptyDataPackage;
import org.springframework.boot.elasticsearch.autoconfigure.ElasticsearchClientAutoConfiguration;
import org.springframework.boot.elasticsearch.autoconfigure.ElasticsearchReactiveClientAutoConfiguration;
import org.springframework.boot.elasticsearch.autoconfigure.ElasticsearchRestClientAutoConfiguration;
import org.springframework.boot.elasticsearch.autoconfigure.ReactiveElasticsearchClientAutoConfiguration;
import org.springframework.boot.test.context.FilteredClassLoader;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.boot.testsupport.container.TestImage;
@@ -41,7 +41,7 @@ import org.springframework.data.elasticsearch.repository.config.EnableReactiveEl
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests for {@link ReactiveElasticsearchRepositoriesAutoConfiguration}.
* Tests for {@link ElasticsearchReactiveRepositoriesAutoConfiguration}.
*
* @author Phillip Webb
* @author Andy Wilkinson
@@ -49,7 +49,7 @@ import static org.assertj.core.api.Assertions.assertThat;
* @author Scott Frederick
*/
@Testcontainers(disabledWithoutDocker = true)
class ReactiveElasticsearchRepositoriesAutoConfigurationTests {
class ElasticsearchReactiveRepositoriesAutoConfigurationTests {
@Container
static final ElasticsearchContainer elasticsearch = TestImage.container(ElasticsearchContainer.class);
@@ -57,8 +57,8 @@ class ReactiveElasticsearchRepositoriesAutoConfigurationTests {
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
.withConfiguration(AutoConfigurations.of(ElasticsearchClientAutoConfiguration.class,
ElasticsearchRestClientAutoConfiguration.class,
ReactiveElasticsearchRepositoriesAutoConfiguration.class, ElasticsearchDataAutoConfiguration.class,
ReactiveElasticsearchClientAutoConfiguration.class))
ElasticsearchReactiveRepositoriesAutoConfiguration.class, ElasticsearchDataAutoConfiguration.class,
ElasticsearchReactiveClientAutoConfiguration.class))
.withPropertyValues(
"spring.elasticsearch.uris=" + elasticsearch.getHost() + ":" + elasticsearch.getFirstMappedPort(),
"spring.elasticsearch.socket-timeout=30s");
@@ -68,7 +68,7 @@ class ReactiveElasticsearchRepositoriesAutoConfigurationTests {
this.contextRunner.withUserConfiguration(TestConfiguration.class)
.withClassLoader(new FilteredClassLoader(Mono.class))
.run((context) -> assertThat(context)
.doesNotHaveBean(ReactiveElasticsearchRepositoriesAutoConfiguration.class));
.doesNotHaveBean(ElasticsearchReactiveRepositoriesAutoConfiguration.class));
}
@Test

View File

@@ -20,7 +20,7 @@ import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.elasticsearch.autoconfigure.ElasticsearchClientAutoConfiguration;
import org.springframework.boot.elasticsearch.autoconfigure.ReactiveElasticsearchClientAutoConfiguration;
import org.springframework.boot.elasticsearch.autoconfigure.ElasticsearchReactiveClientAutoConfiguration;
import org.springframework.context.annotation.Import;
import org.springframework.data.elasticsearch.client.elc.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
@@ -38,7 +38,7 @@ import org.springframework.data.elasticsearch.repository.config.EnableReactiveEl
* @see EnableReactiveElasticsearchRepositories
*/
@AutoConfiguration(
after = { ElasticsearchClientAutoConfiguration.class, ReactiveElasticsearchClientAutoConfiguration.class })
after = { ElasticsearchClientAutoConfiguration.class, ElasticsearchReactiveClientAutoConfiguration.class })
@ConditionalOnClass({ ElasticsearchTemplate.class })
@Import({ ElasticsearchDataConfiguration.BaseConfiguration.class,
ElasticsearchDataConfiguration.JavaClientConfiguration.class,

View File

@@ -41,7 +41,7 @@ import org.springframework.data.elasticsearch.repository.support.ReactiveElastic
@ConditionalOnClass({ ReactiveElasticsearchClient.class, ReactiveElasticsearchRepository.class, Mono.class })
@ConditionalOnBooleanProperty(name = "spring.data.elasticsearch.repositories.enabled", matchIfMissing = true)
@ConditionalOnMissingBean(ReactiveElasticsearchRepositoryFactoryBean.class)
@Import(ReactiveElasticsearchRepositoriesRegistrar.class)
public class ReactiveElasticsearchRepositoriesAutoConfiguration {
@Import(ElasticsearchReactiveRepositoriesRegistrar.class)
public class ElasticsearchReactiveRepositoriesAutoConfiguration {
}

View File

@@ -30,7 +30,7 @@ import org.springframework.data.repository.config.RepositoryConfigurationExtensi
*
* @author Brian Clozel
*/
class ReactiveElasticsearchRepositoriesRegistrar extends AbstractRepositoryConfigurationSourceSupport {
class ElasticsearchReactiveRepositoriesRegistrar extends AbstractRepositoryConfigurationSourceSupport {
@Override
protected Class<? extends Annotation> getAnnotation() {

View File

@@ -27,7 +27,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.data.elasticsearch.health.ElasticsearchReactiveHealthIndicator;
import org.springframework.boot.elasticsearch.autoconfigure.ReactiveElasticsearchClientAutoConfiguration;
import org.springframework.boot.elasticsearch.autoconfigure.ElasticsearchReactiveClientAutoConfiguration;
import org.springframework.boot.health.ReactiveHealthContributor;
import org.springframework.context.annotation.Bean;
import org.springframework.data.elasticsearch.client.elc.ReactiveElasticsearchClient;
@@ -40,7 +40,7 @@ import org.springframework.data.elasticsearch.client.elc.ReactiveElasticsearchCl
* @author Aleksander Lech
* @since 4.0.0
*/
@AutoConfiguration(after = ReactiveElasticsearchClientAutoConfiguration.class)
@AutoConfiguration(after = ElasticsearchReactiveClientAutoConfiguration.class)
@ConditionalOnClass({ ReactiveElasticsearchClient.class, Flux.class, ElasticsearchReactiveHealthIndicator.class,
ConditionalOnEnabledHealthIndicator.class })
@ConditionalOnBean(ReactiveElasticsearchClient.class)

View File

@@ -1,4 +1,4 @@
org.springframework.boot.data.elasticsearch.autoconfigure.ElasticsearchDataAutoConfiguration
org.springframework.boot.data.elasticsearch.autoconfigure.ElasticsearchReactiveRepositoriesAutoConfiguration
org.springframework.boot.data.elasticsearch.autoconfigure.ElasticsearchRepositoriesAutoConfiguration
org.springframework.boot.data.elasticsearch.autoconfigure.ReactiveElasticsearchRepositoriesAutoConfiguration
org.springframework.boot.data.elasticsearch.autoconfigure.health.ElasticsearchReactiveHealthContributorAutoConfiguration

View File

@@ -26,8 +26,8 @@ import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.autoconfigure.TestAutoConfigurationPackage;
import org.springframework.boot.data.elasticsearch.domain.city.City;
import org.springframework.boot.elasticsearch.autoconfigure.ElasticsearchClientAutoConfiguration;
import org.springframework.boot.elasticsearch.autoconfigure.ElasticsearchReactiveClientAutoConfiguration;
import org.springframework.boot.elasticsearch.autoconfigure.ElasticsearchRestClientAutoConfiguration;
import org.springframework.boot.elasticsearch.autoconfigure.ReactiveElasticsearchClientAutoConfiguration;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -57,7 +57,7 @@ class ElasticsearchDataAutoConfigurationTests {
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
.withConfiguration(AutoConfigurations.of(ElasticsearchRestClientAutoConfiguration.class,
ElasticsearchClientAutoConfiguration.class, ElasticsearchDataAutoConfiguration.class,
ReactiveElasticsearchClientAutoConfiguration.class));
ElasticsearchReactiveClientAutoConfiguration.class));
@Test
void defaultRestBeansRegistered() {

View File

@@ -22,8 +22,8 @@ import org.springframework.boot.actuate.autoconfigure.health.HealthContributorAu
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.data.elasticsearch.autoconfigure.ElasticsearchDataAutoConfiguration;
import org.springframework.boot.data.elasticsearch.health.ElasticsearchReactiveHealthIndicator;
import org.springframework.boot.elasticsearch.autoconfigure.ElasticsearchReactiveClientAutoConfiguration;
import org.springframework.boot.elasticsearch.autoconfigure.ElasticsearchRestClientAutoConfiguration;
import org.springframework.boot.elasticsearch.autoconfigure.ReactiveElasticsearchClientAutoConfiguration;
import org.springframework.boot.elasticsearch.autoconfigure.health.ElasticsearchRestHealthContributorAutoConfiguration;
import org.springframework.boot.elasticsearch.health.ElasticsearchRestClientHealthIndicator;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
@@ -39,7 +39,7 @@ class ElasticsearchReactiveHealthContributorAutoConfigurationTests {
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
.withConfiguration(AutoConfigurations.of(ElasticsearchDataAutoConfiguration.class,
ReactiveElasticsearchClientAutoConfiguration.class, ElasticsearchRestClientAutoConfiguration.class,
ElasticsearchReactiveClientAutoConfiguration.class, ElasticsearchRestClientAutoConfiguration.class,
ElasticsearchReactiveHealthContributorAutoConfiguration.class,
HealthContributorAutoConfiguration.class));

View File

@@ -35,20 +35,20 @@ import org.springframework.data.elasticsearch.client.elc.ReactiveElasticsearchCl
import static org.assertj.core.api.Assertions.assertThat;
/**
* Integration tests for {@link ReactiveElasticsearchClientAutoConfiguration}.
* Integration tests for {@link ElasticsearchReactiveClientAutoConfiguration}.
*
* @author Brian Clozel
* @author Andy Wilkinson
*/
@Testcontainers(disabledWithoutDocker = true)
class ReactiveElasticsearchClientAutoConfigurationIntegrationTests {
class ElasticsearchReactiveClientAutoConfigurationIntegrationTests {
@Container
static final ElasticsearchContainer elasticsearch = TestImage.container(ElasticsearchContainer.class);
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
.withConfiguration(AutoConfigurations.of(JacksonAutoConfiguration.class,
ElasticsearchRestClientAutoConfiguration.class, ReactiveElasticsearchClientAutoConfiguration.class));
ElasticsearchRestClientAutoConfiguration.class, ElasticsearchReactiveClientAutoConfiguration.class));
@Test
void reactiveClientCanQueryElasticsearchNode() {

View File

@@ -43,7 +43,7 @@ import org.springframework.data.elasticsearch.client.elc.ReactiveElasticsearchCl
@EnableConfigurationProperties(ElasticsearchProperties.class)
@Import({ ElasticsearchClientConfigurations.JsonpMapperConfiguration.class,
ElasticsearchClientConfigurations.ElasticsearchTransportConfiguration.class })
public class ReactiveElasticsearchClientAutoConfiguration {
public class ElasticsearchReactiveClientAutoConfiguration {
@Bean
@ConditionalOnMissingBean

View File

@@ -1,4 +1,4 @@
org.springframework.boot.elasticsearch.autoconfigure.ElasticsearchClientAutoConfiguration
org.springframework.boot.elasticsearch.autoconfigure.ElasticsearchReactiveClientAutoConfiguration
org.springframework.boot.elasticsearch.autoconfigure.ElasticsearchRestClientAutoConfiguration
org.springframework.boot.elasticsearch.autoconfigure.ReactiveElasticsearchClientAutoConfiguration
org.springframework.boot.elasticsearch.autoconfigure.health.ElasticsearchRestHealthContributorAutoConfiguration

View File

@@ -29,15 +29,15 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
/**
* Tests for {@link ReactiveElasticsearchClientAutoConfiguration}.
* Tests for {@link ElasticsearchReactiveClientAutoConfiguration}.
*
* @author Brian Clozel
* @author Andy Wilkinson
*/
class ReactiveElasticsearchClientAutoConfigurationTests {
class ElasticsearchReactiveClientAutoConfigurationTests {
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
.withConfiguration(AutoConfigurations.of(ReactiveElasticsearchClientAutoConfiguration.class));
.withConfiguration(AutoConfigurations.of(ElasticsearchReactiveClientAutoConfiguration.class));
@Test
void configureWithoutRestClientShouldBackOff() {

View File

@@ -1,10 +1,10 @@
# AutoConfigureDataElasticsearch auto-configuration imports
org.springframework.boot.data.elasticsearch.autoconfigure.ElasticsearchRepositoriesAutoConfiguration
org.springframework.boot.data.elasticsearch.autoconfigure.ElasticsearchDataAutoConfiguration
org.springframework.boot.data.elasticsearch.autoconfigure.ReactiveElasticsearchRepositoriesAutoConfiguration
org.springframework.boot.data.elasticsearch.autoconfigure.ElasticsearchReactiveRepositoriesAutoConfiguration
org.springframework.boot.elasticsearch.autoconfigure.ElasticsearchClientAutoConfiguration
org.springframework.boot.elasticsearch.autoconfigure.ElasticsearchRestClientAutoConfiguration
org.springframework.boot.elasticsearch.autoconfigure.ReactiveElasticsearchClientAutoConfiguration
org.springframework.boot.elasticsearch.autoconfigure.ElasticsearchReactiveClientAutoConfiguration
org.springframework.boot.autoconfigure.ssl.SslAutoConfiguration
org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration
optional:org.springframework.boot.jsonb.autoconfigure.JsonbAutoConfiguration