[JAVA] Implementieren Melden Sie sich mit Twitter in Spring-Boot, Sicherheit, Soziales an

Was in diesem Artikel zu erklären

Da wir Social Login mit Spring-Boot, Spring-Security und Spring-Social implementiert haben, werden wir anhand des Beispiels erklären, wie es implementiert wird. Ich denke, es wird lange dauern, also wählen Sie bitte nur die Kapitel aus und lesen Sie sie, an denen Sie interessiert sind.

In diesem Beispiel können Sie sich anmelden, indem Sie die Benutzer-ID / das Kennwort sowie die soziale Anmeldung eingeben.

Hintergrund

Ich habe Spring-Boot und Spring-Security bei [First Spring Boot] studiert (https://www.amazon.co.jp/dp/4777519694). In diesem Buch verwende ich Spring-Boot und Sicherheit, um eine Listen-App zu erstellen, mit der Sie sich anmelden und abmelden können. Ich wollte jedoch eine Funktion "Mit Twitter anmelden" hinzufügen, also habe ich versucht, sie hinzuzufügen, aber es fiel mir unerwartet schwer. Ta ... Ich habe beschlossen, diesen Artikel zu schreiben, um diese Not von der Welt zu beseitigen.

Über die Probe

Quellcode

es ist hier. Https://github.com/PonzyPon/spring-boot-social-demo

Probieren Sie, was Sie tun können

Was du nicht kannst

Probieren Sie Ihr DB-Design aus

In diesem Beispiel wollte ich sowohl die Anmeldung mit einer eindeutigen ID / dem eindeutigen Passwort als auch die soziale Anmeldung realisieren. Daher wurden zwei Tabellen erstellt. Die Tabelle "Benutzer", die der Master des Benutzers ist, und die Tabelle "UserConnection", die die Informationen zur sozialen Anmeldung enthält. User # user_id und UserConnection # userId sind dasselbe. Verwenden Sie diesen Wert zum Verketten.

Benutzertabelle

Säule Schimmel Ergänzung
user_id VARCHAR primary key
username VARCHAR Dies ist auch einzigartig.
Vom Benutzer bei der Anmeldung eingegeben
display_name VARCHAR
encoded_password VARCHAR

UserConnection-Tabelle

Säule Schimmel
userId VARCHAR
providerId VARCHAR
providerUserId VARCHAR
rank INT
displayName VARCHAR
profileUrl VARCHAR
imageUrl VARCHAR
accessToken VARCHAR
secret VARCHAR
refreshToken VARCHAR
expireTime BIGINT

Diese UserConnection-Tabelle, aber tatsächlich ist diese Konfiguration fast fest. Ich habe den Quellcode für die Bedienung dieser Tabelle überhaupt nicht geschrieben, sondern ihn dem Frühling überlassen. [Gefällt mir] im Frühjahr (https://github.com/spring-projects/spring-social/blob/v1.1.6.RELEASE/spring-social-core/src/main/resources/org/springframework/social) Ein Beispiel für SQL finden Sie in /connect/jdbc/JdbcUsersConnectionRepository.sql). Kopieren und verwenden wir es.

Erklärung des Quellcodes

Was ich bei der Verwendung von Spring-Security und Spring-Social nicht verstehe ** Was ist meine Verantwortung? ** Das bedeutet. Mit anderen Worten, es ist schwierig, die Grenze zwischen dem Teil, den ** spring tut, und dem Teil, den Sie tun sollten, zu verstehen. ** Also werde ich erklären, einschließlich dieses Teils.

Verarbeitungsablauf und seine verantwortliche Person

Benutzer-Anmeldung

Spring ** nicht ** für den Teil, der User aus DB lädt. Es muss also eine Schnittstelle namens "UserDetailService" implementiert werden. Dann wird die Implementierungsklasse ohne Erlaubnis aufgerufen und spring lädt den Benutzer. Die Quelle von "UserDetailsServiceImpl" ist hier

ユーザーログイン.png

Sozialer Login

Bei der sozialen Anmeldung muss das Vorhandensein der Tabelle "UserConnection" bestätigt werden, die die SNS-Kontoinformationen enthält, und die Daten registriert werden. Dies ist jedoch alles bis zum Frühjahr erledigt. Wir Entwickler können einen Benutzer erstellen und aus der Benutzertabelle laden. Die Quelle von "ConnectionSignUpImpl" ist hier Die Quelle von "SocialUserDetailsServiceImpl" ist hier

ソーシャルログイン.png

Andere Klassen

SignupService und UserContext sind nicht erforderlich

Grundsätzlich versuche ich, ein Beispiel für eine soziale Anmeldung mit der Mindestkonfiguration zu erstellen, damit keine unnötigen Klassen vorhanden sind. Sie müssen jedoch beispielsweise keinen "SignupService" erstellen. Diese Schnittstelle wurde von mir selbst erstellt und die Verarbeitung von "SignupServiceImpl # createUser" kann in "ConnectionSignUpImpl # execute" geschrieben werden. Dieses Mal habe ich nur die Klassen aufgeteilt, weil ich dachte, dass die Benutzerregistrierungsfunktion, wenn sie in Zukunft hinzugefügt wird, in verschiedene Klassen unterteilt wird. Außerdem ist "UserContext" eine praktische Klasse, die erstellt wurde, damit die Benutzer-ID des angemeldeten Benutzers leicht abgerufen werden kann. Social Login funktioniert ohne.

Die Federeinstellungen finden Sie in der Sicherheitskonfiguration

Ich habe oben erwähnt, dass der Prozess des Empfangens von Benutzername und Passwort sowie der Authentifizierung dem Frühling überlassen bleibt, die Einstellung jedoch mit "SecurityConfig" erfolgt.

Dies ist das Ende der Erklärung. Von hier an werde ich erklären, wie man sich bewegt und mit dem Sample spielt.

So bewegen Sie die Probe

(Wenn Sie "Consumer Key" und "Consumer Secret" Ihrer Twitter-App haben, beginnen Sie bei 3)

  1. Registrieren Sie die App auf Twitter (https://apps.twitter.com/). Bitte geben Sie so ein. twitter-app-create.png

  2. Setzen Sie nach dem Erstellen der App den "Consumer Key" und das "Consumer Secret" der Twitter-App auf (..) φ memo. 2018-05-19_22h12_16.png

  3. git clone https://github.com/PonzyPon/spring-boot-social-demo.git

  4. Erstellen Sie application.properties, indem Sie application.properties.sample unter src / main / resources kopieren

  5. "Consumer Key" und "Consumer Secret" auf "spring.social.twitter.app-id" und "spring.social.twitter.app-secret" in application.properties (..) φ schreiben

  6. Führen Sie mvnw spring-boot: run im Stammverzeichnis des Projekts aus (wo sich pom.xml befindet) (mvn spring-boot: run ist OK für diejenigen, die maven installiert haben)

  7. Greifen Sie auf localhost zu: 7000

  8. (*^-^*)

(* Wenn beim Anmelden bei Twitter eine Fehlermeldung angezeigt wird, setzen Sie zuerst "Rückruf-URL gesperrt" der Twitter-App auf "Nein". Wenn dies nicht funktioniert, müssen Sie Google verwenden, um das Problem zu beheben (^ ○ ^).)

Wie man mit dem Sample spielt

Ich möchte twittern, nachdem ich mich auf Twitter angemeldet habe

Ich habe eine Methode namens "HomeController # writeTweetIdIfLoggedInWithTwitter" für die Demo erstellt. Wenn Sie auf Twitter angemeldet sind, holen Sie sich die neueste tweetId aus der Zeitleiste des Kontos und schreiben Sie sie in die Konsole. Sie können auch mit der hier verwendeten Variablen "twitter" twittern. Es ist als Beispiel in der Quelle geschrieben. Bitte kommentieren Sie es aus und probieren Sie es aus

HomeController#writeTweetIdIfLoggedInWithTwitter


// Hello!!Tweet
twitter.timelineOperations().updateStatus("Hello!!");

Ich möchte die ID des aktuell angemeldeten Benutzers erhalten

Rufen Sie "UserContext # getUserId" auf. Der Rückgabewert ist "Optional ", da möglicherweise niemand angemeldet ist. Dies ist das Bild, wenn Sie es verwenden.

public class Sample {
  @Autowired
  private final UserContext userContext;

  public Data getData() {
    dao.getData(userContext.getUserId().get());
  }
}

abschließend

Bevor ich dieses Beispiel machte, schrieb ich es mit dem Bild eines Artikels, der mich glücklich machen würde, wenn ich es sehen würde. Wenn Sie Fehler, Meinungen oder Fragen haben, zögern Sie bitte nicht, uns zu kontaktieren. das ist alles.

Recommended Posts

Implementieren Melden Sie sich mit Twitter in Spring-Boot, Sicherheit, Soziales an
Implementieren Sie einen Textlink mit Springboot + Thymeleaf
Versuchen Sie, eine Anmeldefunktion mit Spring-Boot zu implementieren
So implementieren Sie UICollectionView mit Code nur in Swift
Implementieren Sie eine einfache Rest-API mit Spring Security mit Spring Boot 2.0
Implementieren Sie Singleton mit Enum schnell in Java
Behandeln Sie das gehashte Passwort mit BCryptPasswordEncoder von Spring Security in Perl
Rufen Sie Ihre eigene Methode mit PreAuthorize in Spring Security auf