Másodlagos Facebook-bejelentkezés a Spring Social szolgáltatással
1. Áttekintés
Ebben az oktatóanyagban arra összpontosítunk, hogy új Facebook bejelentkezést adjon hozzá egy meglévő űrlap-bejelentkezési alkalmazáshoz.
A tavaszi szociális támogatást arra fogjuk használni, hogy kapcsolatba lépjünk a Facebook-szal, és hogy a dolgok tiszták és egyszerűek maradjanak.
2. Maven konfiguráció
Először hozzá kell tennünk tavasz-szociális-facebook függőség a mi pom.xml:
org.springframework.social spring-social-facebook 2.0.3.KÖZLEMÉNY
3. Biztonsági konfiguráció - Csak űrlap bejelentkezés
Kezdjük először az egyszerű biztonsági konfigurációval, ahol csak űrlap alapú hitelesítéssel rendelkezünk:
@Configuration @EnableWebSecurity @ComponentScan (basePackages = {"com.baeldung.security"}) public SecurityPonfig kiterjeszti a WebSecurityConfigurerAdapter {@Autowired private UserDetailsService userDetailsService; A @Orride védett void konfiguráció (AuthenticationManagerBuilder auth) dobja a Kivételt {auth.userDetailsService (userDetailsService); } A @Orride protected void configure (HttpSecurity http) dobja a {http .csrf (). Disable () .authorizeRequests () .antMatchers ("/ login *"). AllowAll () .anyRequest (). Hitelesített () .és ( ) .formLogin (). loginPage ("/ login"). allowAll (); }}
Nem fogunk sok időt tölteni ezzel a konfigurációval - ha jobban meg akarja érteni, nézze meg az űrlap bejelentkezési cikkét.
4. A Facebook tulajdonságai
Ezután konfiguráljuk a Facebook tulajdonságait a alkalmazás.tulajdonságok:
spring.social.facebook.appId = YOUR_APP_ID spring.social.facebook.appSecret = YOUR_APP_SECRET
Vegye figyelembe, hogy:
- A beszerzéshez létre kell hoznunk egy Facebook alkalmazást appId és appSecret
- A Facebook alkalmazás Beállítások között győződjön meg arról, hogy hozzáadja a „Platform” webhelyet és // localhost: 8080 / a „Webhely URL”
5. Security Config - Facebook hozzáadása
Most adjunk hozzá egy új módszert a rendszeren történő hitelesítéshez - a Facebook vezérli:
a public class SecurityConfig kiterjeszti a WebSecurityConfigurerAdapter {@Autowired private FacebookConnectionSignup facebookConnectionSignup; @Value ("$ {spring.social.facebook.appSecret}") String appSecret; @Value ("$ {spring.social.facebook.appId}") Karakterlánc appId; A @Orride protected void configure (HttpSecurity http) a {http .authorizeRequests () .antMatchers ("/ login *", "/ signin / **", "/ signup / **") kivételt dobja. @Bean public ProviderSignInController szolgáltatóSignInController () {ConnectionFactoryLocator connectionFactoryLocator = connectionFactoryLocator (); UsersConnectionRepository usersConnectionRepository = getUsersConnectionRepository (connectionFactoryLocator); [(InMemoryUsersConnectionRepository) usersConnectionRepository] .setConnectionSignUp (facebookConnectionSignup); return new ProviderSignInController (connectionFactoryLocator, usersConnectionRepository, new FacebookSignInAdapter ()); } privát ConnectionFactoryLocator connectionFactoryLocator () {ConnectionFactoryRegistry register = új ConnectionFactoryRegistry (); register.addConnectionFactory (új FacebookConnectionFactory (appId, appSecret)); visszatérési nyilvántartás; } privát UsersConnectionRepository getUsersConnectionRepository (ConnectionFactoryLocator connectionFactoryLocator) {return new InMemoryUsersConnectionRepository (connectionFactoryLocator); }}
Nézzük meg alaposan az új konfigurációt:
- használunk egy ProviderSignInController a Facebook-hitelesítés engedélyezéséhez, amire két dologra van szükség:
először a ConnectionFactoryLocator regisztrált a FacebookConnectionFactory az általunk korábban meghatározott Facebook tulajdonságokkal.
másodszor egy InMemoryUsersConnectionRepository.
- elküldésével a POST nak nek "/ signin / facebook”- ez a vezérlő kezdeményezi a felhasználói bejelentkezést a Facebook szolgáltató segítségével
- létrehozunk egy SignInAdapter hogy kezeljük a bejelentkezési logikát alkalmazásunkban
- és felállítjuk a ConnectionSignUp implicit módon kezelni a regisztráló felhasználókat, amikor először hitelesítenek a Facebookon
6. A bejelentkezési adapter
Egyszerűen fogalmazva, ez az adapter híd a fenti vezérlő - a Facebook felhasználói bejelentkezési folyamatot vezérlő - és a saját helyi alkalmazásunk között:
public class FacebookSignInAdapter implementálja a SignInAdapter {@Orride public String signIn (String localUserId, Connection connection, NativeWebRequest request) {SecurityContextHolder.getContext (). setAuthentication (new UsernamePasswordAuthenticationToken (connection.getDisplayName (), null, Array.as (null, Array.as ")))); return null; }}
Ne feledje, hogy a Facebook használatával bejelentkezett felhasználóknak szerepük lesz FACEBOOK FELHASZNÁLÓ, míg az űrlap használatával bejelentkezett felhasználóknak szerepük lesz FELHASZNÁLÓ. Amikor egy felhasználó először hitelesít a Facebook-on, nincs meglévő fiókja az alkalmazásunkban. Itt kell létrehoznunk számukra ezt a fiókot; használjuk a ConnectionSignUp a felhasználó létrehozási logikájának meghajtásához: Amint láthatja, létrehoztunk egy fiókot az új felhasználó számára - az ő felhasználásával Megjelenítendő név mint felhasználónév. Végül vessünk egy pillantást a kezelőfelületünkre. Most támogatni fogjuk ezt a két hitelesítési folyamatot - bejelentkezési űrlap és Facebook - a bejelentkezési oldalon: Végül - itt van a index.html: Felhasználónév Felhasználói hatóságok Vegye figyelembe, hogy ez az indexoldal hogyan jeleníti meg a felhasználóneveket és a jogosultságokat. És ennyi - most kétféleképpen lehet hitelesíteni az alkalmazást. Ebben a gyors cikkben megtanultuk a használatát tavasz-szociális-facebook másodlagos hitelesítési folyamat megvalósításához alkalmazásunkhoz. És természetesen, mint mindig, a forráskód is teljes mértékben elérhető a GitHubon.7. Csatlakozás regisztrálása
@Service public class FacebookConnectionSignup megvalósítja a ConnectionSignUp {@Autowired private UserRepository userRepository; @Orride public String execute (Connection connection) {Felhasználó felhasználó = új Felhasználó (); user.setUsername (kapcsolat.getDisplayName ()); user.setPassword (randomAlphabetic (8)); userRepository.save (felhasználó); return user.getUsername (); }}
8. Az elülső rész
Ön kijelentkezett. Hiba történt, próbálkozzon újra
9. Következtetés