1. 程式人生 > >解決springboot 2.x 移除了 SocialAutoConfiguerAdapter類註冊connectionFactory的問題

解決springboot 2.x 移除了 SocialAutoConfiguerAdapter類註冊connectionFactory的問題

1.5x的springboot在 AutoConfig social 包下面有個SocialAutoConfigurerAdapter類

之前如果要生產一個OAuth2ConnectionFactory的連線工廠,只需要繼承這個類,重寫一個ConnectionFactory<?> createConnectionFactory() 的方法,在裡面new一個自定義的連線工廠即可。

但2.x以後這個包去掉了,然後之前的做法走不通了。我第一個想到的就是度娘了,沒辦法,本人菜鳥一枚。但翻遍度娘沒有一個帖子說到這個問題(應該是因為太簡單了 - -!)。本人手上的工程都快完工了,應客戶要求軟體必須支援某三方認證,不可能因為這步走不通又把工程降級到springboot 1.x.x。無法,只有自己看文件和原始碼了。運氣比較好,剛檢視原始碼就發現 SocialConfigurerAdapter抽象類裡面 居然! 有個

public void addConnectionFactories(ConnectionFactoryConfigurer connectionFactoryConfigurer, Environment environment) {
}

方法...也是無敵了。然後再檢視引數為ConnectionFactoryConfigurer的類,發現是個介面,裡面躺著一個叫addConnectionFactory的介面方法,名字很正,想著自然有實現注進來吧(實際是SecurityEnabledConnectionFactoryConfigurer 他會把你自定義的連線工廠處理後放到一個map裡),就直接拿來用。我工程裡的程式碼如下:

@Override
public void addConnectionFactories(ConnectionFactoryConfigurer connectionFactoryConfigurer, Environment environment) {
    super.addConnectionFactories(connectionFactoryConfigurer, environment);
    XProperties xProperties = SysProperties.getSocial().getX();
    YProperties yProperties = SysProperties.getSocial().getY();
    connectionFactoryConfigurer.addConnectionFactory(
            new XConnectionFactory(xProperties .getProviderId(), xProperties .getAppId(), xProperties .getAppSecret()));
    connectionFactoryConfigurer.addConnectionFactory(
            new YConnectionFactory(yProperties .getProviderId(), yProperties .getAppId(), yProperties .getAppSecret()));
}

這樣只需要在這一處就可以新增適配N個三方認證伺服器的連線工廠了,比1.x的為每一個三方認證伺服器註冊N個配置類要方便吧。

希望可以幫到有此問題麼有解決的同學。