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.
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.
c'est ici. Https://github.com/PonzyPon/spring-boot-social-demo
V1__create-tables.sql
.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.
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 |
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.
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.
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
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 de
ConnectionSignUpImplest [ici](https://github.com/PonzyPon/spring-boot-social-demo/blob/master/src/main/java/com/sample/service/impl/ConnectionSignUpImpl.java) La source de
SocialUserDetailsServiceImpl` est ici
SignupService
et ʻUserContext` ne sont pas obligatoiresFondamentalement, 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.
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.
(Si vous avez «Consumer Key» et «Consumer Secret» de votre application Twitter, commencez par 3)
Enregistrez l'application sur Twitter (https://apps.twitter.com/) Veuillez entrer comme ça.
Après avoir créé l'application, définissez la «Clé du consommateur» et le «Secret du consommateur» de l'application Twitter sur (..) φ mémo.
git clone https://github.com/PonzyPon/spring-boot-social-demo.git
Créez application.properties en copiant application.properties.sample sous src / main / resources
«Consumer Key» et «Consumer Secret» sur «spring.social.twitter.app-id» et «spring.social.twitter.app-secret» dans application.properties (..) φ écrire
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)
Accédez à localhost: 7000
(*^-^*)
(* 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 (^ ○ ^))
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!!");
ʻ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());
}
}
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