J'essaie d'utiliser la connexion Facebook comme décrit dans https://github.com/spring-guides/gs-accessing-facebook

Lorsque j'essaie de créer JdbcUsersConnectionRepository, j'ai besoin de la sécurité du ressort dans le chemin de classe. Et quand j'ajoute la sécurité du printemps, je reçois

"java.lang.IllegalStateException: Unable to get a ConnectionRepository: no user signed in"

En essayant de recevoir une connexion

Connection<Facebook> connection = connectionRepository.findPrimaryConnection(Facebook.class);

Ou vérification

if (!facebook.isAuthorized())

Tout cela se produit uniquement lorsque la sécurité du ressort est dans le chemin de classe

7
Pavel Bernshtam 29 déc. 2015 à 16:37

2 réponses

Meilleure réponse

La connexion sociale doit correspondre à n'importe quel utilisateur authentifié. Il semble que l'utilisateur doit se connecter via le nom d'utilisateur / mot de passe ou le fournisseur de services. Essayez de regarder http: //docs.spring .io / spring-social / docs / 1.0.x / reference / html / signin.html

"java.lang.IllegalStateException: Unable to get a ConnectionRepository: no user signed in"

Cela se produit parce que AuthenticationNameUserIdSource utilisé par défaut

En interne, la prise en charge de la configuration de Spring Social utilisera UsersConnectionRepository pour créer un bean ConnectionRepository à portée de demande. Ce faisant, il doit identifier l'utilisateur actuel. Par conséquent, nous devons également remplacer getUserIdSource () pour renvoyer une instance d'un UserIdSource.

Dans ce cas, nous renvoyons une instance de AuthenticationNameUserIdSource. Cette implémentation de l'interface UserIdSource suppose que l'application est sécurisée avec Spring Security. Il utilise SecurityContextHolder pour rechercher un SecurityContext et à partir de là, renvoie la propriété name de l'objet Authentication.

Si votre application n’est pas sécurisée avec Spring Security, vous devrez implémenter l’interface UserIdSource pour le mécanisme de sécurité de votre application. L'interface UserIdSource ressemble à ceci:

package org.springframework.social;
public interface UserIdSource {
    String getUserId();
}

La méthode getUserId () renvoie simplement une chaîne qui identifie de manière unique l'utilisateur actuel.

En savoir plus

1
Community 20 juin 2020 à 09:12

Si vous utilisez Spring boot, la propriété security basic ne doit pas être définie sur false. Cachez cette ligne dans votre application.properties. Cela désactive la sécurité et le démarrage génère l'erreur si la sécurité à ressort est désactivée.

#security.basic.enabled=false
-1
Lucky 31 oct. 2016 à 12:55