diff --git a/spring-social-security/src/main/java/org/springframework/social/security/SpringSocialConfigurer.java b/spring-social-security/src/main/java/org/springframework/social/security/SpringSocialConfigurer.java index 3c5f662d6..0848c59b8 100644 --- a/spring-social-security/src/main/java/org/springframework/social/security/SpringSocialConfigurer.java +++ b/spring-social-security/src/main/java/org/springframework/social/security/SpringSocialConfigurer.java @@ -53,6 +53,8 @@ public class SpringSocialConfigurer extends SecurityConfigurerAdapter filter instanceof SocialAuthenticationFilter)); + + final SocialAuthenticationFilter socialAuthenticationFilter = + (SocialAuthenticationFilter) defaultFilterChain.getFilters() + .stream().filter(filter -> filter instanceof SocialAuthenticationFilter).findFirst().orElse(null); + assertNotNull(socialAuthenticationFilter); + + assertTrue(ReflectionTestUtils.getField(socialAuthenticationFilter, "userIdSource") instanceof AuthenticationNameUserIdSource); + + final ProviderManager providerManager = + (ProviderManager) ReflectionTestUtils.getField(socialAuthenticationFilter, "authenticationManager"); + assertTrue(providerManager.getProviders().stream().anyMatch(authenticationProvider -> authenticationProvider instanceof SocialAuthenticationProvider)); + + assertNotNull(ReflectionTestUtils.getField(socialAuthenticationFilter, "rememberMeServices")); + final SocialAuthenticationFailureHandler failureHandler = + (SocialAuthenticationFailureHandler) ReflectionTestUtils.getField(socialAuthenticationFilter, "failureHandler"); + + assertEquals("/postFailure", ReflectionTestUtils.getField(failureHandler.getDelegate(), "defaultFailureUrl")); + final AuthenticationSuccessHandler successHandler = + (AuthenticationSuccessHandler) ReflectionTestUtils.getField(socialAuthenticationFilter, "successHandler"); + assertEquals("/postLogin", ReflectionTestUtils.getField(successHandler, "defaultTargetUrl")); + assertEquals("/social-login", ReflectionTestUtils.getField(socialAuthenticationFilter, "filterProcessesUrl")); + assertEquals("/connectionAdded", ReflectionTestUtils.getField(socialAuthenticationFilter, "connectionAddedRedirectUrl")); + assertEquals("/signup", ReflectionTestUtils.getField(socialAuthenticationFilter, "signupUrl")); + + assertSame(this.usersConnectionRepository, socialAuthenticationFilter.getUsersConnectionRepository()); + assertSame(this.socialAuthenticationServiceLocator, socialAuthenticationFilter.getAuthServiceLocator()); + } + + @EnableWebSecurity + @Configuration + static class SpringSocialSecurityConfig extends WebSecurityConfigurerAdapter { + + // @formatter:off + @Override + protected void configure(HttpSecurity http) throws Exception { + http + .rememberMe() + .and() + .apply(new SpringSocialConfigurer() + .userIdSource(new AuthenticationNameUserIdSource()) + .postLoginUrl("/postLogin") + .postFailureUrl("/postFailure") + .signupUrl("/signup") + .connectionAddedRedirectUrl("/connectionAdded") + .filterProcessesUrl("/social-login")); + } + // @formatter:on + + @Bean + public UsersConnectionRepository usersConnectionRepository() { + return mock(UsersConnectionRepository.class); + } + + @Bean + public SocialUserDetailsService socialUserDetailsService() { + return mock(SocialUserDetailsService.class); + } + + @Bean + public SocialAuthenticationServiceLocator socialAuthenticationServiceLocator() { + return mock(SocialAuthenticationServiceLocator.class); + } + } +}