Heim >Java >javaLernprogramm >So nutzen Sie Spring Social, um sich mit sozialen Netzwerken zu verbinden

So nutzen Sie Spring Social, um sich mit sozialen Netzwerken zu verbinden

怪我咯
怪我咯Original
2017-06-23 14:18:032086Durchsuche

Soziale Netzwerke sind heute aus dem Leben der Menschen nicht mehr wegzudenken. Beliebte soziale Netzwerke wie Facebook, LinkedIn, Twitter und Sina Weibo erfreuen sich großer Beliebtheit und sind zu Websites geworden, die viele Menschen jeden Tag besuchen müssen. In sozialen Netzwerken werden zahlreiche Informationen geteilt. Für eine Bewerbung ist die Bereitstellung einer Unterstützung für soziale Netzwerke erforderlich. Apps können durch die Integration in soziale Netzwerke schnell an Popularität gewinnen. Die Integration mit sozialen Netzwerken hat hauptsächlich zwei Funktionen: Die erste ist eine relativ einfache Benutzer-Login-Integration, die es Benutzern ermöglicht, sich mit vorhandenen Konten auf Websites sozialer Netzwerke bei der Anwendung anzumelden. Dies hat den Vorteil, dass dem Benutzer eine Neuregistrierung erspart werden kann und außerdem eine Verbindung mit dem bestehenden sozialen Netzwerk des Benutzers hergestellt werden kann. Zweitens ist es die Methode der tiefgreifenden Integration, die es Benutzern ermöglicht, relevante Inhalte zu teilen die Anwendung auf soziale Netzwerke Mitte. Dies hat den Vorteil, dass die Benutzerbindung aufrechterhalten und gleichzeitig die Anwendung selbst beworben werden kann.

Soziale Netzwerke in Ihre App zu integrieren ist keine komplizierte Aufgabe. Viele soziale Netzwerkdienste bieten offene APIs, die die Integration von Anwendungen von Drittanbietern ermöglichen. Zur Vervollständigung lesen Sie einfach die entsprechende Dokumentation. Allerdings erfordert die Integration selbst einen gewissen Arbeitsaufwand. Je mehr Websites integriert werden müssen, desto höher ist der entsprechende Aufwand. Als Teil der Spring-Framework-Komponentenfamilie bietet Spring Social eine Abstraktion sozialer Netzwerkdienste und stellt zugehörige APIs für den Betrieb bereit.

Der größte Vorteil der Verwendung von Spring Social besteht darin, dass es bereits Unterstützung für gängige soziale Netzwerke bietet und nur eine einfache Konfiguration erfordert. Für einige weniger häufig genutzte Social-Networking-Sites finden Sie auch entsprechende Komponenten aus der Community. In diesem Artikel wird anhand einer Beispielanwendung die Verwendung von Spring Social veranschaulicht.

Beispielanwendung

Mit diesem Beispiel können sich Benutzer bei sozialen Netzwerken anmelden, um Informationen über ihre Freunde anzuzeigen. Dies ist eine Webanwendung, die mit dem Spring MVC-Framework erstellt wurde. Die Anwendung verwendet eine eingebettete H2-Datenbank zum Speichern von Daten. Das Frontend verwendet JSP, JSTL und die von Spring bereitgestellte Tag-Bibliothek und verwendet Apache Tiles für das Seitenlayout. Verwalten Sie die Benutzerauthentifizierung mit Spring Security. Die Seite wird mithilfe der Twitter Bootstrap-Bibliothek gestaltet. Das Projekt wird mit Gradle erstellt. Die Front-End-Bibliothek wird über Bower verwaltet.

Die im Beispiel bereitgestellten Funktionen sind relativ einfach und umfassen hauptsächlich Anmelde- und Registrierungsseiten sowie die Homepage des Benutzers. Beim Anmelden können Benutzer wählen, ob sie ein Konto bei einem sozialen Netzwerk eines Drittanbieters verwenden möchten. Nach der Anmeldung können Sie Freundesinformationen in sozialen Netzwerken einsehen.

Anmelden mit vorhandenen Konten in sozialen Netzwerken

Die grundlegendste in soziale Netzwerke integrierte Funktion besteht darin, Benutzern die Anmeldung mit vorhandenen Konten zu ermöglichen. Neben der Registrierung eines neuen Kontos können Benutzer auch bestehende Konten von anderen Websites zum Anmelden verwenden. Diese Methode wird oft als Verbindung zu Websites Dritter bezeichnet. Für Benutzer besteht das übliche Szenario darin, auf der Registrierungs- oder Anmeldeseite ein soziales Netzwerk eines Drittanbieters auszuwählen, um eine Verbindung herzustellen. Gehen Sie dann zur Anmeldung und Autorisierung auf die Website des Drittanbieters. Nach Abschluss der oben genannten Schritte wird ein neuer Benutzer erstellt. Während des Verbindungsvorgangs kann die Anwendung die Profilinformationen des Benutzers von der Social-Networking-Site eines Drittanbieters abrufen, um die Erstellung neuer Benutzer abzuschließen. Nachdem der neue Benutzer erstellt wurde, kann sich der Benutzer beim nächsten Mal direkt mit dem Konto des sozialen Netzwerks des Drittanbieters anmelden.

Grundkonfiguration

Spring Social bietet die Implementierung des Spring MVC-Controllers (Controller), der die Anmeldung und Registrierung von Website-Benutzern von Drittanbietern verwaltet und die Verwendung automatisch abschließen kann Anmelde- und Registrierungsfunktion für Konten in sozialen Netzwerken. Vor der Verwendung dieser Controller sind einige grundlegende Konfigurationen erforderlich. Die Konfiguration von Spring Social wird durch die Implementierung der Schnittstelle org.springframework.social.config.annotation.SocialConfigurer abgeschlossen. Es wird ein Teil der SocialConfig-Klasse angegeben, die die SocialConfigurer-Schnittstelle implementiert. Die Annotation „@EnableSocial“ wird verwendet, um Spring Social-bezogene Funktionen zu aktivieren. Die Annotation „@Configuration“ gibt an, dass diese Klasse auch Konfigurationsinformationen zum Spring-Framework enthält. Die SocialConfigurer-Schnittstelle verfügt über drei Methoden, die implementiert werden müssen:

addConnectionFactories: Diese Rückrufmethode wird verwendet, damit die Anwendung die Implementierung der Verbindungsfabrik hinzufügen kann, die dem sozialen Netzwerk entspricht, das unterstützt werden muss.

getUserIdSource: Diese Rückrufmethode gibt ein Implementierungsobjekt der Schnittstelle org.springframework.social.UserIdSource zurück, das zur eindeutigen Identifizierung des aktuellen Benutzers verwendet wird.

getUsersConnectionRepository: Diese Rückrufmethode gibt ein Implementierungsobjekt der Schnittstelle org.springframework.social.connect.UsersConnectionRepository zurück, das zum Verwalten der Korrespondenz zwischen Benutzern und Anbietern sozialer Netzwerkdienste verwendet wird.

Speziell für die Beispielanwendung fügt die Implementierung der Methode addConnectionFactories die Verbindungsfabrik-Implementierung von LinkedIn hinzu, die durch die Klasse org.springframework.social.linkedin.connect.LinkedInConnectionFactory dargestellt wird. Bei der Implementierung der getUserIdSource-Methode wird Spring Security verwendet, um die Informationen des aktuell angemeldeten Benutzers abzurufen. Die Methode getUsersConnectionRepository erstellt ein Implementierungsobjekt der datenbankbasierten JdbcUsersConnectionRepository-Klasse. Die LinkedInConnectionFactory-Klasse wird so erstellt, dass sie die Leistungsfähigkeit von Spring Social widerspiegelt. Um die von LinkedIn bereitgestellten Funktionen direkt nutzen zu können, ist lediglich die Angabe des bei LinkedIn genutzten API-Schlüssels erforderlich. Details zu OAuth werden von Spring Social gekapselt.

1. Verwenden Sie die Grundkonfiguration von Spring Social

@Configuration@EnableSocialpublic class SocialConfig implements SocialConfigurer { @Inject
 private DataSource dataSource; @Override
 public void addConnectionFactories(ConnectionFactoryConfigurer cfConfig, Environment env) {
 cfConfig.addConnectionFactory(new LinkedInConnectionFactory(env.getProperty("linkedin.consumerKey"), env.getProperty("linkedin.consumerSecret")));
 } @Override
 public UserIdSource getUserIdSource() { return new UserIdSource() { @Override
 public String getUserId() {
 Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if (authentication == null) { throw new IllegalStateException("Unable to get a ConnectionRepository: no user signed in");
 } return authentication.getName();
 }
 };
 } @Override
 public UsersConnectionRepository getUsersConnectionRepository(ConnectionFactoryLocator connectionFactoryLocator) { return new JdbcUsersConnectionRepository(dataSource, connectionFactoryLocator, Encryptors.noOpText());
 }
}

Login-Controller

Der nächste Schritt nach der Konfiguration von Spring Social besteht darin, den entsprechenden zu erstellen Spring MVC-Controller für die Benutzerregistrierung und -anmeldung. Spring Social bietet bereits eine entsprechende Controller-Implementierung. Sie müssen lediglich eine Schnittstelle erstellen, um Anfragen zu stellen. Als erstes muss ein Controller für die Anmeldung über ein soziales Netzwerk eines Drittanbieters erstellt werden. Wie gezeigt, müssen Sie nur ein Spring Bean erstellen, um den erforderlichen Controller zu erstellen. Dieser Controller ist standardmäßig an die URL „/signin“ gebunden. Jeder Drittanbieter verfügt über eine entsprechende Kennung, beispielsweise die Kennung „linkedin“ von LinkedIn. Die Kennung des Dienstanbieters ist häufig als Teil der URL für verschiedene Controller enthalten. Wenn sich ein Benutzer beispielsweise über ein LinkedIn-Konto anmelden muss, lautet die entsprechende URL „/signin/linkedin“. Wenn Sie sich über ein Twitter-Konto anmelden, lautet die entsprechende URL „/signin/twitter“.

2. Controller für die Anmeldung über soziale Netzwerke von Drittanbietern

@Beanpublic ProviderSignInController providerSignInController(ConnectionFactoryLocator connectionFactoryLocator, UsersConnectionRepository usersConnectionRepository) { return new ProviderSignInController(connectionFactoryLocator, usersConnectionRepository, new SimpleSignInAdapter(new HttpSessionRequestCache()));
}

Im Obigen implementiert die SimpleSignInAdapter-Klasse die Schnittstelle org.springframework.social.connect.web.SignInAdapter Fungiert als Brücke zwischen der ProviderSignInController-Klasse und der Anmeldelogik der Anwendung selbst. Nachdem sich der Benutzer auf der Website eines Drittanbieters angemeldet hat, wird er automatisch über die SignInAdapter-Schnittstelle bei der Anwendung angemeldet. Die Implementierung der SimpleSignInAdapter-Klasse ist unten dargestellt.

3. Implementierung der SimpleSignInAdapter-Klasse

public class SimpleSignInAdapter implements SignInAdapter { private final RequestCache requestCache; @Inject
 public SimpleSignInAdapter(RequestCache requestCache) { this.requestCache = requestCache;
 } @Override
 public String signIn(String localUserId, Connection<?> connection, NativeWebRequest request) {
 SignInUtils.signin(localUserId); return extractOriginalUrl(request);
 } private String extractOriginalUrl(NativeWebRequest request) {
 HttpServletRequest nativeReq = request.getNativeRequest(HttpServletRequest.class);
 HttpServletResponse nativeRes = request.getNativeResponse(HttpServletResponse.class);
 SavedRequest saved = requestCache.getRequest(nativeReq, nativeRes); if (saved == null) { return null;
 }
 requestCache.removeRequest(nativeReq, nativeRes);
 removeAutheticationAttributes(nativeReq.getSession(false)); return saved.getRedirectUrl();
 } private void removeAutheticationAttributes(HttpSession session) { if (session == null) { return;
 }
 session.removeAttribute(WebAttributes.AUTHENTICATION_EXCEPTION);
 }
}

Im Codelisting 3 ruft die signIn-Methode der SimpleSignInAdapter-Klasse die signin-Methode der SignInUtils-Klasse auf, um sich anzumelden, und seine Implementierung Siehe Codelisting 4. Der Rückgabewert der signIn-Methode ist die Sprung-URL nach erfolgreicher Anmeldung.

4. Implementierung der signIn-Methode der SignInUtils-Klasse

public class SignInUtils { public static void signin(String userId) {
 SecurityContextHolder.getContext().setAuthentication(new UsernamePasswordAuthenticationToken(userId, null, null));
 }
}

Frontend-Seite

Sie müssen lediglich eine POST-Anfrage an die URL des Logins stellen Controller über die Seite, um den Anmeldevorgang über LinkedIn zu starten. Wie in der Abbildung dargestellt, kann der Anmeldevorgang durch Absenden des Formulars gestartet werden. Der Benutzer wird zunächst zur Autorisierungsseite der LinkedIn-Website weitergeleitet. Nach Abschluss der Autorisierung kann sich der Benutzer registrieren.

5. Anmeldeseite

<form id="linkedin-signin-form" action="signin/linkedin" method="POST" class="form-signin" role="form">
 <h2 class="form-signin-heading">Or Connect by</h2>
 <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
 <button type="submit" class="btn btn-primary">LinkedIn</button>
</form>

Nach Abschluss der Autorisierung der Drittanbieter-Website wird der Benutzer standardmäßig zu der Seite weitergeleitet, die der URL „/signup“ entspricht. Auf dieser Seite können Benutzer einige relevante Registrierungsinformationen hinzufügen. Gleichzeitig können Benutzerprofilinformationen, die von Websites Dritter stammen, wie beispielsweise der Name des Benutzers, vorab ausgefüllt werden. Die Aktionen dieser Seite nach dem Absenden des Formulars werden vom angezeigten Controller verwaltet.

6. Implementierung des Benutzerregistrierungscontrollers

@RequestMapping(value="/signup", method=RequestMethod.POST)
public String signup(@Valid @ModelAttribute("signup") SignupForm form, BindingResult formBinding, WebRequest request) { if (formBinding.hasErrors()) { return null;
 }
 Account account = createAccount(form, formBinding); if (account != null) {
 SignInUtils.signin(account.getUsername());
 ProviderSignInUtils.handlePostSignUp(account.getUsername(), request); return "redirect:/";
 } return null;
}

Nachdem der Benutzer das Registrierungsformular übermittelt hat, erstellen Sie ein entsprechendes Konto basierend auf den vom Benutzer eingegebenen Informationen und melden Sie sich dann neu an Registrieren Sie Ihr Konto und springen Sie zur Startseite zurück.

API verwenden

Spring Social 的另外一个重要的作用在于提供了很多社交网络服务的 API 的封装。当用户通过社交网络的账号登录之后,可以通过相应的 API 获取到相关的信息,或执行一些操作。比如获取到用户的好友信息,或是根据用户的要求发布新的消息。一般来说,很多社交网络服务提供商都有自己的 API 来提供给开发人员使用。不过一般只提供 REST API,并没有 Java 封装。Spring Social 的一个目标是为主流的社交网络提供相应的 Java 封装的 API。对于社区已经有良好的 Java 库的社交网络,如 Twitter,Spring Social 会进行整合与封装;而对于暂时没有 Java 实现的,Spring Social 的组件会提供相应的支持。如示例应用中使用的 LinkedIn 的 Java API 是由 Spring Social 开发的。

在使用 LinkedIn 的 Java API 之前,首先要创建相应的 Spring Bean,如所示。

 7. 创建 LinkedIn API 对应的 Bean

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

LinkedIn Java API 的核心接口是 org.springframework.social.linkedin.api.LinkedIn。如果当前用户已经连接了 LinkedIn 的账号,就可以通过 ConnectionRepository 接口找到该用户对应的连接的信息,并创建出 API 接口的实现。是展示 LinkedIn 上好友信息的控制器的实现。

8. 展示 LinkedIn 上好友信息的控制器的实现

@Controllerpublic class LinkedInConnectionsController { private LinkedIn linkedIn; @Inject
 public LinkedInConnectionsController(LinkedIn linkedIn) { this.linkedIn = linkedIn;
 } @RequestMapping(value="/connections", method= RequestMethod.GET) public String connections(Model model) {
 model.addAttribute("connections", linkedIn.connectionOperations().getConnections()); return "connections";
 }
}

通过 LinkedIn 接口的 connectionOperations 方法可以获取到 org.springframework.social.linkedin.api.ConnectionOperations 接口的实现,然后就可以再通过 getConnections 方法获取到包含好友信息的 org.springframework.social.linkedin.api.LinkedInProfile 类的对象列表。然后就可以在网页上展示,如所示。

9. 展示 LinkedIn 好友信息的页面

<ul class="media-list">
 <c:forEach items="${connections}" var="connection">
 <li class="media">
 <a href="" class="pull-left">
 <img class="lazy-load" data-original="${connection.profilePictureUrl}" alt="" class="media-object">
 </a>
 <div class="media-body">
 <h4 class="media-heading">${connection.firstName} ${connection.lastName}</h4>
 <p><c:out value="${connection.headline}" /></p>
 </div>
 </li>
 </c:forEach>
</ul>

结束语

在社交网络日益流行的今天,Web 应用都应该考虑增加对社交网络的支持。这样既方便了用户,让他们省去了重新注册的麻烦,又可以增加用户粘性,同时可以通过社交网络进行推广。虽然很多社交网站都提供了开放 API 来让应用使用其服务,但是集成所需的工作量是不小的。Spring Social 作为 Spring 框架中的一部分,为在 Web 应用中集成社交网络提供了良好支持。本文详细介绍了如何通过 Spring Social 来实现通过社交网络账号进行登录以及使用社交网络提供的 API。

Das obige ist der detaillierte Inhalt vonSo nutzen Sie Spring Social, um sich mit sozialen Netzwerken zu verbinden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Java-LernpfadNächster Artikel:Java-Lernpfad