[JAVA] Implémentez la connexion avec Twitter dans Spring-Boot, Security, Social

Que expliquer dans cet article

Puisque nous avons implémenté la connexion sociale à l'aide de spring-boot, spring-security et spring-social, nous expliquerons comment l'implémenter à l'aide de l'exemple. Je pense que ce sera long, veuillez donc sélectionner et lire uniquement les chapitres qui vous intéressent.

Dans cet exemple, vous pouvez vous connecter en entrant l'ID utilisateur / mot de passe ainsi que la connexion sociale.

Contexte

J'ai étudié le spring-boot et le spring-security chez First Spring Boot. Dans ce livre, j'utilise spring-boot et la sécurité pour créer une application de liste qui vous permet de vous connecter et de vous déconnecter, mais je voulais y ajouter une fonction "Se connecter avec Twitter", alors j'ai essayé de l'ajouter, mais j'ai eu du mal de manière inattendue. Ta ... J'ai décidé d'écrire cet article afin d'éradiquer cette épreuve du monde.

À propos de l'échantillon

Code source

c'est ici. Https://github.com/PonzyPon/spring-boot-social-demo

Découvrez ce que vous pouvez faire

Ce que tu ne peux pas faire

Exemple de conception de votre base de données

Dans cet exemple, je voulais réaliser à la fois une connexion avec un identifiant / mot de passe unique et une connexion sociale. Par conséquent, deux tables ont été créées. La table ʻUser, qui est le maître de l'utilisateur, et la table ʻUserConnection, qui contient les informations de connexion sociale. ʻUser # user_id et ʻUserConnection # userId sont la même chose. Utilisez cette valeur pour concaténer.

Table des utilisateurs

colonne Moule Supplément
user_id VARCHAR primary key
username VARCHAR C'est aussi UNIQUE.
Saisie par l'utilisateur lors de la connexion
display_name VARCHAR
encoded_password VARCHAR

Table UserConnection

colonne Moule
userId VARCHAR
providerId VARCHAR
providerUserId VARCHAR
rank INT
displayName VARCHAR
profileUrl VARCHAR
imageUrl VARCHAR
accessToken VARCHAR
secret VARCHAR
refreshToken VARCHAR
expireTime BIGINT

Cette table UserConnection, mais en fait, cette configuration est presque fixe. Je n'ai pas du tout écrit le code source pour faire fonctionner cette table, je l'ai laissé au printemps. [Comme ça] dans spring-framework (https://github.com/spring-projects/spring-social/blob/v1.1.6.RELEASE/spring-social-core/src/main/resources/org/springframework/social Un exemple de sql est fourni dans /connect/jdbc/JdbcUsersConnectionRepository.sql). Copions et utilisons-le.

Explication du code source

Ce que je ne comprends pas en utilisant spring-security et spring-social ** Quelle est ma responsabilité? ** Cela signifie. En d'autres termes, il est difficile de comprendre la limite entre la partie que fait ** spring et la partie que vous devez faire. ** Je vais donc vous expliquer en incluant cette partie.

Flux de traitement et sa personne responsable

Utilisateur en ligne

Spring ne ** pas ** pour la partie qui charge l'utilisateur à partir de la base de données. Il faut donc implémenter une interface appelée ʻUserDetailService`. Ensuite, la classe d'implémentation sera appelée sans autorisation et Spring chargera l'utilisateur. «La source de UserDetailsServiceImpl» est ici

ユーザーログイン.png

Connexion sociale

Dans le cas d'une connexion sociale, il est nécessaire de confirmer l'existence de la table ʻUserConnectionqui contient les informations du compte SNS et d'enregistrer les données. Cependant, tout cela se fait au printemps. Nous les développeurs pouvons créer un utilisateur et le charger à partir de la table User. La source deConnectionSignUpImplest [ici](https://github.com/PonzyPon/spring-boot-social-demo/blob/master/src/main/java/com/sample/service/impl/ConnectionSignUpImpl.java) La source deSocialUserDetailsServiceImpl` est ici

ソーシャルログイン.png

Autres classes

SignupService et ʻUserContext` ne sont pas obligatoires

Fondamentalement, j'essaie de créer un échantillon de connexion sociale avec la configuration minimale, donc il n'y a pas de classes inutiles, mais par exemple, vous n'avez pas à créer SignupService. Cette interface a été créée par moi-même, et le traitement de SignupServiceImpl # createUser peut être écrit dans ConnectionSignUpImpl # execute. Cette fois, je viens de diviser les classes car je pensais que si la fonction d'enregistrement des utilisateurs était ajoutée à l'avenir, elle serait divisée en différentes classes. De plus, ʻUserContext` est une classe pratique créée pour que l'identifiant de l'utilisateur connecté puisse être facilement obtenu. La connexion sociale fonctionne sans elle.

Les paramètres Spring sont dans Security Config

J'ai mentionné ci-dessus que le processus de réception du nom d'utilisateur et du mot de passe et d'authentification est laissé au printemps, mais le réglage est effectué avec SecurityConfig.

C'est la fin de l'explication. A partir de là, je vais vous expliquer comment déplacer et jouer avec l'échantillon.

Comment déplacer l'échantillon

(Si vous avez «Consumer Key» et «Consumer Secret» de votre application Twitter, commencez par 3)

  1. Enregistrez l'application sur Twitter (https://apps.twitter.com/) Veuillez entrer comme ça. twitter-app-create.png

  2. Après avoir créé l'application, définissez la «Clé du consommateur» et le «Secret du consommateur» de l'application Twitter sur (..) φ mémo. 2018-05-19_22h12_16.png

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

  4. Créez application.properties en copiant application.properties.sample sous src / main / resources

  5. «Consumer Key» et «Consumer Secret» sur «spring.social.twitter.app-id» et «spring.social.twitter.app-secret» dans application.properties (..) φ écrire

  6. Exécutez mvnw spring-boot: run à la racine du projet (où se trouve pom.xml) (mvn spring-boot: run est OK pour ceux qui ont installé maven)

  7. Accédez à localhost: 7000

  8. (*^-^*)

(* Si vous obtenez une erreur lors de la connexion à Twitter, essayez d'abord de définir `` URL de rappel verrouillée '' de l'application Twitter sur Non. Si cela ne fonctionne pas, vous devez Google pour le résoudre (^ ○ ^))

Comment jouer avec l'échantillon

Je veux tweeter après m'être connecté sur Twitter

J'ai créé une méthode appelée HomeController # writeTweetIdIfLoggedInWithTwitter pour la démo, et si vous êtes connecté sur Twitter, obtenez le dernier tweetId de la chronologie du compte et écrivez-le sur la console. Vous pouvez également tweeter en utilisant la variable twitter utilisée ici. Il est écrit dans la source sous forme d'exemple, veuillez donc commenter et essayer

HomeController#writeTweetIdIfLoggedInWithTwitter


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

Je souhaite obtenir l'ID de l'utilisateur actuellement connecté

ʻAppeler UserContext # getUserId. La valeur de retour est ʻOptional <String> , car personne ne peut être connecté. C'est l'image lors de son utilisation.

public class Sample {
  @Autowired
  private final UserContext userContext;

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

en conclusion

Avant de faire cet échantillon, je l'ai écrit avec l'image d'un article qui me ferait plaisir si je le voyais. Si vous avez des erreurs, des opinions ou des questions, n'hésitez pas à nous contacter. c'est tout.

Recommended Posts

Implémentez la connexion avec Twitter dans Spring-Boot, Security, Social
Implémenter le lien texte avec Springboot + Thymeleaf
Essayez d'implémenter une fonction de connexion avec Spring-Boot
Comment implémenter UICollectionView avec du code uniquement dans Swift
Implémentez une API Rest simple avec Spring Security avec Spring Boot 2.0
Implémentez rapidement singleton avec enum en Java
Gérer le mot de passe haché avec BCryptPasswordEncoder de Spring Security en Perl
Appelez votre propre méthode avec PreAuthorize dans Spring Security