0

私は現在、Spring Social フレームワークに慣れようとしています。残念ながら、私がフォローしているチュートリアルのコードでは、 (Web アプリケーションの観点から) 1 つのグローバル ログインのみが許可されているようです。

たとえば、作業中のラップトップで Facebook に接続していますが、別のブラウザーでアプリを開いた後も、最初に使用したユーザーの詳細が表示されます。

一度に複数のユーザーで認証する方法を示す良いチュートリアルはありますか?

「問題」はにあるようHelloControllerです。ユーザーが承認されると、アプリケーション全体に対してグローバルに承認されます。複数のログインで機能するように変更するにはどうすればよいですか?

package hello;

import javax.inject.Inject;

import org.springframework.social.facebook.api.Facebook;
import org.springframework.social.facebook.api.PagedList;
import org.springframework.social.facebook.api.Post;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("/")
public class HelloController {

    private Facebook facebook;

    @Inject
    public HelloController(Facebook facebook) {
        this.facebook = facebook;
    }

    @RequestMapping(method=RequestMethod.GET)
    public String helloFacebook(Model model) {
        if (!facebook.isAuthorized()) {
            return "redirect:/connect/facebook";
        }

        model.addAttribute(facebook.userOperations().getUserProfile());
        PagedList<Post> homeFeed = facebook.feedOperations().getHomeFeed();
        model.addAttribute("feed", homeFeed);

        return "hello";
    }

}

編集

Facebook インスタンスをリクエスト スコープ Bean として作成しても、変更はありません。これが私のコードです。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.annotation.Scope;
import org.springframework.context.annotation.ScopedProxyMode;
import org.springframework.core.env.Environment;
import org.springframework.social.UserIdSource;
import org.springframework.social.config.annotation.ConnectionFactoryConfigurer;
import org.springframework.social.config.annotation.EnableSocial;
import org.springframework.social.config.annotation.SocialConfigurerAdapter;
import org.springframework.social.connect.Connection;
import org.springframework.social.connect.ConnectionFactoryLocator;
import org.springframework.social.connect.ConnectionRepository;
import org.springframework.social.connect.web.ConnectController;
import org.springframework.social.facebook.api.Facebook;
import org.springframework.social.facebook.connect.FacebookConnectionFactory;

import my.social.StaticUserIdSource;

@Configuration
@EnableSocial
@PropertySource("classpath:application.properties")
public class SocialConfig extends SocialConfigurerAdapter {

    @Configuration
    public static class FacebookConfiguration extends SocialConfigurerAdapter {

        @Override
        public void addConnectionFactories(
                ConnectionFactoryConfigurer connectionFactoryConfigurer,
                Environment environment) {
            connectionFactoryConfigurer
                    .addConnectionFactory(new FacebookConnectionFactory(
                            environment.getRequiredProperty("facebook.appId"),
                            environment
                                    .getRequiredProperty("facebook.appSecret")));
        }

        @Bean
        public ConnectController connectController(ConnectionFactoryLocator connectionFactoryLocator, ConnectionRepository connectionRepository) {
            ConnectController connectController = new ConnectController(connectionFactoryLocator, connectionRepository);
            return connectController;
        }

        @Bean
        @Scope(value = "request", proxyMode = ScopedProxyMode.INTERFACES)
        public Facebook facebookTemplate(ConnectionRepository connectionRepository) {
            Connection<Facebook> connection = connectionRepository.findPrimaryConnection(Facebook.class);
            return connection != null ? connection.getApi() : null;
        }
    }

    @Override
    public UserIdSource getUserIdSource() {
        return new StaticUserIdSource();
    }
}
4

1 に答える 1

1

あなたの設定StaticUserIdSourceでは、定義済みのユーザーIDを使用する名前から判断して使用しています。指定された ID を持つユーザーを登録すると (Facebook での最初の認証後)、他のすべてのユーザーに使用されます。

于 2015-01-13T12:13:07.460 に答える