Sekundarna Facebook prijava s Spring Social

1. Pregled

U ovom uputstvu usredotočit ćemo se na dodavanje nove Facebook prijave u postojeću aplikaciju za prijavu obrazaca.

Koristit ćemo podršku Spring Spring za interakciju s Facebookom i održavanje stvari čistim i jednostavnim.

2. Konfiguracija Maven

Prvo, trebat ćemo dodati proljeće-društveni-facebook ovisnost o našoj pom.xml:

 org.springframework.social spring-social-facebook 2.0.3.OSLOBOĐENJE 

3. Sigurnosna konfiguracija - samo prijavite obrazac

Krenimo prvo od jednostavne sigurnosne konfiguracije gdje imamo samo provjeru autentičnosti na temelju oblika:

@Configuration @EnableWebSecurity @ComponentScan (basePackages = {"com.baeldung.security"}) javna klasa SecurityConfig proširuje WebSecurityConfigurerAdapter {@Autowired private UserDetailsService userDetailsService; @Override zaštićena void konfiguracija (AuthenticationManagerBuilder auth) baca iznimku {auth.userDetailsService (userDetailsService); } @Override zaštićena void konfiguracija (HttpSecurity http) baca iznimku {http .csrf (). Disable () .authorizeRequests () .antMatchers ("/ login *"). AllowAll () .anyRequest (). Authenticated () .and ( ) .formLogin (). loginPage ("/ login"). allowAll (); }}

Nećemo trošiti puno vremena na ovu konfiguraciju - ako je želite bolje razumjeti, pogledajte članak za prijavu u obrazac.

4. Facebook svojstva

Dalje, konfigurirajmo Facebook svojstva u našem primjena.svojstva:

spring.social.facebook.appId = YOUR_APP_ID spring.social.facebook.appSecret = YOUR_APP_SECRET

Imajte na umu da:

  • Moramo stvoriti Facebook aplikaciju za dobivanje appId i appSecret
  • U postavkama Facebook aplikacije obavezno dodajte platformu "Web stranica" i // localhost: 8080 / je "URL web lokacije"

5. Sigurnosna konfiguracija - dodavanje Facebooka

Sad, dodajmo novi način autentifikacije u sustav - vođen Facebookom:

javna klasa SecurityConfig proširuje WebSecurityConfigurerAdapter {@Autowired privatni FacebookConnectionSignup facebookConnectionSignup; @Value ("$ {spring.social.facebook.appSecret}") String appSecret; @Value ("$ {spring.social.facebook.appId}") String appId; @Override zaštićena void konfiguracija (HttpSecurity http) baca iznimku {http .authorizeRequests () .antMatchers ("/ login *", "/ signin / **", "/ signup / **"). AllowAll () ...} @Bean public ProviderSignInController providerSignInController () {ConnectionFactoryLocator connectionFactoryLocator = connectionFactoryLocator (); UsersConnectionRepository usersConnectionRepository = getUsersConnectionRepository (connectionFactoryLocator); ((InMemoryUsersConnectionRepository) usersConnectionRepository) .setConnectionSignUp (facebookConnectionSignup); vrati novi ProviderSignInController (connectionFactoryLocator, usersConnectionRepository, novi FacebookSignInAdapter ()); } private ConnectionFactoryLocator connectionFactoryLocator () {ConnectionFactoryRegistry registry = novi ConnectionFactoryRegistry (); registry.addConnectionFactory (novi FacebookConnectionFactory (appId, appSecret)); registar povrata; } private UsersConnectionRepository getUsersConnectionRepository (ConnectionFactoryLocator connectionFactoryLocator) {return new InMemoryUsersConnectionRepository (connectionFactoryLocator); }}

Pogledajmo pažljivo novu konfiguraciju:

  • koristimo a ProviderSignInController kako bi se omogućila autentifikacija na Facebooku, za što su potrebne dvije stvari:

    prvo, a ConnectionFactoryLocator registriran kao FacebookConnectionFactory s Facebook svojstvima koja smo ranije definirali.

    drugo, an InMemoryUsersConnectionRepository.

  • slanjem a OBJAVI do "/ prijava / facebook”- ovaj će kontrolor pokrenuti prijavu korisnika putem davatelja usluge Facebook
  • postavljamo a SignInAdapter za rukovanje logikom prijave u našoj aplikaciji
  • a mi također postavljamo a ConnectionSignUp implicitno se baviti registracijom korisnika prilikom njihove prve autentifikacije putem Facebooka

6. Adapter za prijavu

Jednostavno rečeno, ovaj je adapter most između kontrolera iznad - koji pokreće tijek prijave korisnika Facebooka - i naše specifične lokalne aplikacije:

javna klasa FacebookSignInAdapter implementira SignInAdapter {@Override public String signIn (String localUserId, veza za povezivanje, zahtjev NativeWebRequest) {SecurityContextHolder.getContext (). setAuthentication (new UsernamePasswordAuthenticationToken (connection.getDisplayNameArtGrainDisplayNameArtGrainDisplayNameArtGrainDisplayNameArtGrainDisplayNameArtGrainDisplayNameArth. ")))); return null; }}

Imajte na umu da će korisnici prijavljeni putem Facebooka imati ulogu FACEBOOK KORISNIK, dok će korisnici prijavljeni pomoću obrasca imati ulogu KORISNIK.

7. Prijava na vezu

Kada se korisnik prvi put provjeri autentičnost putem Facebooka, nema postojeći račun u našoj aplikaciji.

To je točka u kojoj trebamo automatski stvoriti taj račun za njih; koristit ćemo ConnectionSignUp za pokretanje te logike stvaranja korisnika:

@Service javna klasa FacebookConnectionSignup implementira ConnectionSignUp {@Autowired private UserRepository userRepository; @Override public String execute (Connection connection) {User user = new User (); user.setUsername (connection.getDisplayName ()); user.setPassword (randomAlphabetic (8)); userRepository.save (korisnik); vratiti user.getUsername (); }}

Kao što vidite, stvorili smo račun za novog korisnika - koristeći njihov DisplayName kao korisničko ime.

8. Prednji kraj

Napokon, pogledajmo naš prednji kraj.

Sad ćemo imati podršku za ova dva tijeka provjere autentičnosti - obrazac za prijavu i Facebook - na našoj stranici za prijavu:

 Odjavljeni ste. Došlo je do pogreške, pokušajte ponovo 

Napokon - evo index.html:

Korisničko ime

Odjavite se

Korisnička ovlaštenja

Imajte na umu kako ova indeksna stranica prikazuje korisnička imena i ovlaštenja.

I to je to - sada imamo dva načina za autentifikaciju u aplikaciji.

9. Zaključak

U ovom kratkom članku naučili smo kako koristiti proljeće-društveni-facebook za implementaciju sekundarnog tijeka provjere autentičnosti za našu aplikaciju.

I naravno, kao i uvijek, izvorni je kod u potpunosti dostupan na GitHubu.


$config[zx-auto] not found$config[zx-overlay] not found