Sekundárne prihlásenie na Facebook so službou Spring Social
1. Prehľad
V tejto príručke sa zameriame na pridanie nového prihlásenia na Facebook do existujúcej aplikácie na prihlásenie pomocou formulára.
Budeme využívať jarnú sociálnu podporu na interakciu s Facebookom a udržiavať veci čisté a jednoduché.
2. Konfigurácia Maven
Najskôr budeme musieť pridať jar-social-facebook závislosť na našom pom.xml:
org.springframework.social spring-social-facebook 2.0.3.RELEASE
3. Konfigurácia zabezpečenia - stačí prihlásiť sa do formulára
Najprv začnime od jednoduchej konfigurácie zabezpečenia, kde máme iba overenie na základe formulára:
@Configuration @EnableWebSecurity @ComponentScan (basePackages = {"com.baeldung.security"}) verejná trieda SecurityConfig rozširuje WebSecurityConfigurerAdapter {@Autowired private UserDetailsService userDetailsService; @Override protected void configure (AuthenticationManagerBuilder auth) vyvolá výnimku {auth.userDetailsService (userDetailsService); } @Override protected void configure (HttpSecurity http) vyvolá výnimku {http .csrf (). Disable () .authorizeRequests () .antMatchers ("/ login *"). PermitAll () .anyRequest (). Authenticated (). A ( ) .formLogin (). loginPage ("/ login"). permitAll (); }}
Nebudeme tráviť veľa času touto konfiguráciou - ak tomu chcete lepšie porozumieť, pozrite si článok na prihlásenie do formulára.
4. Vlastnosti Facebooku
Ďalej nakonfigurujme vlastnosti Facebooku v našom application.properties:
spring.social.facebook.appId = YOUR_APP_ID spring.social.facebook.appSecret = YOUR_APP_SECRET
Poznač si to:
- Potrebujeme vytvoriť aplikáciu na Facebooku, aby sme ju mohli získať appId a appSecret
- V nastaveniach aplikácie Facebook nezabudnite pridať „Webovú stránku“ platformy a // localhost: 8080 / je „adresa URL stránky“
5. Konfigurácia zabezpečenia - pridanie Facebooku
Teraz pridajme nový spôsob autentifikácie do systému - založený na Facebooku:
verejná trieda SecurityConfig rozširuje WebSecurityConfigurerAdapter {@Autowired private FacebookConnectionSignup facebookConnectionSignup; @Value ("$ {spring.social.facebook.appSecret}") Reťazec appSecret; @Value ("$ {spring.social.facebook.appId}") String appId; @Override protected void configure (HttpSecurity http) vyvolá výnimku {http .authorizeRequests () .antMatchers ("/ login *", "/ signin / **", "/ signup / **"). PermitAll () ...} @Bean public ProviderSignInController providerSignInController () {ConnectionFactoryLocator connectionFactoryLocator = connectionFactoryLocator (); UsersConnectionRepository usersConnectionRepository = getUsersConnectionRepository (connectionFactoryLocator); ((InMemoryUsersConnectionRepository) usersConnectionRepository) .setConnectionSignUp (facebookConnectionSignup); vrátiť nový ProviderSignInController (connectionFactoryLocator, usersConnectionRepository, nový FacebookSignInAdapter ()); } súkromný ConnectionFactoryLocator connectionFactoryLocator () {register ConnectionFactoryRegistry = nový ConnectionFactoryRegistry (); registry.addConnectionFactory (nový FacebookConnectionFactory (appId, appSecret)); návratový register; } private UsersConnectionRepository getUsersConnectionRepository (ConnectionFactoryLocator connectionFactoryLocator) {return new InMemoryUsersConnectionRepository (connectionFactoryLocator); }}
Pozrime sa pozorne na novú konfiguráciu:
- používame a ProviderSignInController povoliť autentifikáciu na Facebooku, ktorá vyžaduje dve veci:
najskôr, a ConnectionFactoryLocator registrované ako FacebookConnectionFactory s vlastnosťami Facebooku, ktoré sme definovali skôr.
druhý, an InMemoryUsersConnectionRepository.
- zaslaním a POST „/ prihlásenie / facebook„- tento radič iniciuje prihlásenie používateľa pomocou poskytovateľa služieb Facebooku
- zakladáme a SignInAdapter na spracovanie logiky prihlásenia v našej aplikácii
- a tiež zakladáme a ConnectionSignUp na implicitné vybavenie registrácie používateľov pri ich prvej autentifikácii pomocou Facebooku
6. Prihlasovací adaptér
Zjednodušene povedané, tento adaptér je mostom medzi radičom vyššie - riadiacim tok prihlásenia používateľov Facebooku - a našou konkrétnou lokálnou aplikáciou:
verejná trieda FacebookSignInAdapter implementuje SignInAdapter {@Override public String signIn (String localUserId, pripojenie pripojenia, požiadavka NativeWebRequest) {SecurityContextHolder.getContext (). setAuthentication (nové UsernamePasswordAuthenticationToken (connection.getDisplayName (), null, Arrays.aseras ")))); návrat null; }}
Upozorňujeme, že úlohu budú mať používatelia prihlásení pomocou Facebooku POUŽÍVATEĽ FACEBOOKU, zatiaľ čo používatelia prihlásení pomocou formulára budú mať rolu UŽÍVATEĽ. Keď sa používateľ autentizuje na Facebooku prvýkrát, nemá v našej aplikácii žiadny účet. Toto je bod, v ktorom pre nich musíme automaticky vytvoriť tento účet; budeme používať a ConnectionSignUp riadiť túto logiku vytvárania používateľov: Ako vidíte, vytvorili sme účet pre nových používateľov - pomocou ich Zobraziť meno ako používateľské meno. Na záver sa pozrime na naše klientske rozhranie. Teraz budeme mať podporu pre tieto dva toky autentifikácie - prihlásenie pomocou formulára a Facebook - na našej prihlasovacej stránke: Nakoniec - tu je index.html: Užívateľské meno Orgány používateľa Všimnite si, ako táto indexová stránka zobrazuje používateľské mená a oprávnenia. A je to - teraz máme dva spôsoby overenia totožnosti v aplikácii. V tomto rýchlom článku sme sa naučili, ako používať jar-social-facebook implementovať sekundárny autentifikačný tok pre našu aplikáciu. A samozrejme ako vždy je zdrojový kód plne k dispozícii na GitHub.7. Zaregistrujte sa
@ Verejná trieda @Service FacebookConnectionSignup implementuje ConnectionSignUp {@Autowired private UserRepository userRepository; @ Override public String execute (Pripojenie k pripojeniu) {User user = new User (); user.setUsername (connection.getDisplayName ()); user.setPassword (randomAlphabetic (8)); userRepository.save (užívateľ); vrátiť user.getUsername (); }}
8. Klientske rozhranie
Boli ste odhlásení. Vyskytla sa chyba, skúste to znova
9. Záver