美文网首页
SpringBoot2.x 关于SocialAutoConfig

SpringBoot2.x 关于SocialAutoConfig

作者: 匆匆岁月 | 来源:发表于2019-08-02 16:08 被阅读0次

    1.Social包在SpringBoot2.x移除问题

    spring-boot-autoconfigure1.5x版本中支持facebook,领英和推特
    官方文档:https://docs.spring.io/spring-boot/docs/1.5.18.RELEASE/api/

    spring-boot-autoconfigure2.x中版本找不到了
    官方文档:https://docs.spring.io/spring-boot/docs/2.1.1.RELEASE/api/

    image

    问题:遇到SocialAutoConfigurerAdapterSocialPropertiesSocialWebAutoConfigurerAdapter类不存在

    解决方法:

    不想引入1.5版本的springboot的话只能自己按照源码重写(复制粘贴)
    官方Github也是这样写的:https://github.com/spring-projects/spring-social
    SocialAutoConfigurerAdapter源码

    public abstract class SocialAutoConfigurerAdapter extends SocialConfigurerAdapter {
        public SocialAutoConfigurerAdapter() {
        }
        public void addConnectionFactories(ConnectionFactoryConfigurer configurer, Environment environment) {
            configurer.addConnectionFactory(this.createConnectionFactory());
        }
        protected abstract ConnectionFactory<?> createConnectionFactory();
    }
    
    

    SocialProperties源码

    public abstract class SocialProperties {
        private String appId;
        private String appSecret;
        public SocialProperties() {
        }
        public String getAppId() {
            return this.appId;
        }
        public void setAppId(String appId) {
            this.appId = appId;
        }
        public String getAppSecret() {
            return this.appSecret;
        }
        public void setAppSecret(String appSecret) {
            this.appSecret = appSecret;
        }
    }
    
    

    SocialWebAutoConfiguration源码

    @Configuration
    @ConditionalOnClass({ConnectController.class, SocialConfigurerAdapter.class})
    @ConditionalOnBean({ConnectionFactoryLocator.class, UsersConnectionRepository.class})
    @AutoConfigureBefore({ThymeleafAutoConfiguration.class})
    @AutoConfigureAfter({WebMvcAutoConfiguration.class})
    public class SocialWebAutoConfiguration {
        public SocialWebAutoConfiguration() {
        }
    
        private static class SecurityContextUserIdSource implements UserIdSource {
            private SecurityContextUserIdSource() {
            }
    
            public String getUserId() {
                SecurityContext context = SecurityContextHolder.getContext();
                Authentication authentication = context.getAuthentication();
                Assert.state(authentication != null, "Unable to get a ConnectionRepository: no user signed in");
                return authentication.getName();
            }
        }
    
        @Configuration
        @ConditionalOnClass({SpringResourceResourceResolver.class})
        protected static class SpringSocialThymeleafConfig {
            protected SpringSocialThymeleafConfig() {
            }
    
            @Bean
            @ConditionalOnMissingBean
            public SpringSocialDialect springSocialDialect() {
                return new SpringSocialDialect();
            }
        }
    
        @Configuration
        @EnableSocial
        @ConditionalOnWebApplication
        @ConditionalOnClass({SecurityContextHolder.class})
        protected static class AuthenticationUserIdSourceConfig extends SocialConfigurerAdapter {
            protected AuthenticationUserIdSourceConfig() {
            }
    
            public UserIdSource getUserIdSource() {
                return new SocialWebAutoConfiguration.SecurityContextUserIdSource();
            }
        }
    
        @Configuration
        @EnableSocial
        @ConditionalOnWebApplication
        @ConditionalOnMissingClass({"org.springframework.security.core.context.SecurityContextHolder"})
        protected static class AnonymousUserIdSourceConfig extends SocialConfigurerAdapter {
            protected AnonymousUserIdSourceConfig() {
            }
    
            public UserIdSource getUserIdSource() {
                return new UserIdSource() {
                    public String getUserId() {
                        return "anonymous";
                    }
                };
            }
        }
    
        @Configuration
        @EnableSocial
        @ConditionalOnWebApplication
        protected static class SocialAutoConfigurationAdapter extends SocialConfigurerAdapter {
            private final List<ConnectInterceptor<?>> connectInterceptors;
            private final List<DisconnectInterceptor<?>> disconnectInterceptors;
            private final List<ProviderSignInInterceptor<?>> signInInterceptors;
    
            public SocialAutoConfigurationAdapter(ObjectProvider<List<ConnectInterceptor<?>>> connectInterceptorsProvider, ObjectProvider<List<DisconnectInterceptor<?>>> disconnectInterceptorsProvider, ObjectProvider<List<ProviderSignInInterceptor<?>>> signInInterceptorsProvider) {
                this.connectInterceptors = (List)connectInterceptorsProvider.getIfAvailable();
                this.disconnectInterceptors = (List)disconnectInterceptorsProvider.getIfAvailable();
                this.signInInterceptors = (List)signInInterceptorsProvider.getIfAvailable();
            }
    
            @Bean
            @ConditionalOnMissingBean({ConnectController.class})
            public ConnectController connectController(ConnectionFactoryLocator factoryLocator, ConnectionRepository repository) {
                ConnectController controller = new ConnectController(factoryLocator, repository);
                if (!CollectionUtils.isEmpty(this.connectInterceptors)) {
                    controller.setConnectInterceptors(this.connectInterceptors);
                }
    
                if (!CollectionUtils.isEmpty(this.disconnectInterceptors)) {
                    controller.setDisconnectInterceptors(this.disconnectInterceptors);
                }
    
                return controller;
            }
    
            @Bean
            @ConditionalOnMissingBean
            @ConditionalOnProperty(
                prefix = "spring.social",
                name = {"auto-connection-views"}
            )
            public BeanNameViewResolver beanNameViewResolver() {
                BeanNameViewResolver viewResolver = new BeanNameViewResolver();
                viewResolver.setOrder(-2147483648);
                return viewResolver;
            }
    
            @Bean
            @ConditionalOnBean({SignInAdapter.class})
            @ConditionalOnMissingBean
            public ProviderSignInController signInController(ConnectionFactoryLocator factoryLocator, UsersConnectionRepository usersRepository, SignInAdapter signInAdapter) {
                ProviderSignInController controller = new ProviderSignInController(factoryLocator, usersRepository, signInAdapter);
                if (!CollectionUtils.isEmpty(this.signInInterceptors)) {
                    controller.setSignInInterceptors(this.signInInterceptors);
                }
    
                return controller;
            }
        }
    }
    
    

    相关文章

      网友评论

          本文标题:SpringBoot2.x 关于SocialAutoConfig

          本文链接:https://www.haomeiwen.com/subject/umgldctx.html