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. 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: Kao što vidite, stvorili smo račun za novog korisnika - koristeći njihov DisplayName kao korisničko ime. 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: Napokon - evo index.html: Korisničko ime 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. 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.7. Prijava na vezu
@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 (); }}
8. Prednji kraj
Odjavljeni ste. Došlo je do pogreške, pokušajte ponovo
9. Zaključak