0
在我目前的春季項目中,我最近使用Spring-Social添加了對社交登錄的支持。主要配置類是這樣的:使用Spring-Social執行SignIn和SignUp方法的順序
@Configuration
@EnableSocial
@ComponentScan(value="com.webapp.loja")
public class SocialContext implements SocialConfigurer {
@Autowired
private DataSource dataSource;
@Autowired
private SignInAdapter signInAdapter;
@Autowired
private ConnectionSignUp connectionSignUp;
@Override
public void addConnectionFactories(ConnectionFactoryConfigurer cfConfig, Environment env) {
cfConfig.addConnectionFactory(new TwitterConnectionFactory("...", "..."));
cfConfig.addConnectionFactory(new FacebookConnectionFactory("...", "..."));
}
@Override
public UserIdSource getUserIdSource() {
return new AuthenticationNameUserIdSource();
}
@Override
public UsersConnectionRepository getUsersConnectionRepository(ConnectionFactoryLocator connectionFactoryLocator) {
JdbcUsersConnectionRepository repository = new JdbcUsersConnectionRepository(dataSource, connectionFactoryLocator, Encryptors.noOpText());
repository.setConnectionSignUp(connectionSignUp);
return repository;
}
@Bean
public ConnectController connectController(ConnectionFactoryLocator connectionFactoryLocator, ConnectionRepository connectionRepository) {
return new ConnectController(connectionFactoryLocator, connectionRepository);
}
@Bean
public ProviderSignInController providerSignInController(ConnectionFactoryLocator connectionFactoryLocator, UsersConnectionRepository connectionRepository) {
return new ProviderSignInController(connectionFactoryLocator, connectionRepository, signInAdapter);
}
}
我的問題是,當我嘗試在應用程序與任何社交媒體服務簽到,該應用程序執行firts的connectionSignUp
類和signInAdapter
後。
我想oposite行爲:第一個應用程序應該執行signInAdapter
,在那裏我試圖找到,如果用戶已經存在:
@Service
public class SimpleSignInAdapter implements SignInAdapter {
@Autowired
private SocialUserDetailsService socialUserDetailsService;
@Override
public String signIn(String userId, Connection<?> connection, NativeWebRequest request) {
SocialUserDetails user = socialUserDetailsService.loadUserByUserId(userId);
if(user != null) {
SecurityContextHolder.getContext().setAuthentication(new UsernamePasswordAuthenticationToken(user.getUsername(), user.getPassword(), user.getAuthorities()));
return user.getUsername();
} else {
return null;
}
}
}
僅如果沒有用戶發現(返回NULL),應用程序應該執行connectionSignUp
類創建一個新帳戶:
@Component
public class AccountConnectionSignUp implements ConnectionSignUp {
@Autowired
private UsuarioHome accountRepository;
@Override
public String execute(Connection<?> connection) {
UserProfile profile = connection.fetchUserProfile();
Usuario account = new Usuario(profile.getUsername(), profile.getFirstName(), profile.getLastName(), profile.getEmail());
accountRepository.persist(account);
return profile.getUsername();
}
}
任何人都知道這是否可能?