כניסה משנית לפייסבוק עם Spring Social

1. סקירה כללית

במדריך זה נתמקד בהוספת כניסה חדשה לפייסבוק לאפליקציה קיימת של כניסה לטופס.

אנו נשתמש בתמיכה החברתית האביבית כדי לקיים אינטראקציה עם פייסבוק ולשמור על דברים נקיים ופשוטים.

2. תצורת Maven

ראשית, נצטרך להוסיף אביב-חברתי-פייסבוק תלות שלנו pom.xml:

 org.springframework.social spring-social-facebook 2.0.3. שחרור 

3. תצורת אבטחה - פשוט צרו כניסה

נתחיל תחילה מתצורת האבטחה הפשוטה שבה פשוט יש לנו אימות מבוסס טופס:

@Configuration @EnableWebSecurity @ComponentScan (basePackages = {"com.baeldung.security"}) מחלקה ציבורית SecurityConfig מרחיב את WebSecurityConfigurerAdapter {@Autowired פרטי UserDetailsService userDetailsService; תצורת הריק המוגנת על ידי @Override (AuthenticationManagerBuilder auth) זורקת חריג {auth.userDetailsService (userDetailsService); } תצורת הריק המוגנת על ידי @Override (HttpSecurity http) זורקת חריג {http .csrf (). השבת () .authorizeRequests () .antMatchers ("/ login *"). PermAll () .anyRequest (). מאומת () .and ( ) .formLogin (). loginPage ("/ login"). permitAll (); }}

אנחנו לא הולכים להשקיע זמן רב בתצורה זו - אם אתה רוצה להבין את זה טוב יותר, עיין במאמר הכניסה לטופס.

4. נכסי הפייסבוק

לאחר מכן, בואו להגדיר את המאפיינים של פייסבוק במוצרים שלנו application.properties:

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

ציין זאת:

  • עלינו ליצור יישום פייסבוק כדי להשיג appId ו appSecret
  • מהגדרות יישום פייסבוק, הקפד להוסיף פלטפורמה "אתר" ו // localhost: 8080 / הוא "כתובת האתר"

5. Config Config - הוספת פייסבוק

עכשיו, בואו נוסיף דרך חדשה לאימות במערכת - המונעת על ידי פייסבוק:

מחלקה ציבורית SecurityConfig מרחיב את WebSecurityConfigurerAdapter {@Autowired פרטי FacebookConnectionSignup facebookConnectionSignup; @Value ("$ {spring.social.facebook.appSecret}") appSecret מחרוזת; @Value ("$ {spring.social.facebook.appId}") appId מחרוזת; התצורה הריקה מוגנת של @Override (HttpSecurity http) זורקת חריג {http .authorizeRequests () .antMatchers ("/ login *", "/ signin / **", "/ signup / **"). PermitAll () ...} @Bean ProviderSignInController ציבורי ספקSignInController () {ConnectionFactoryLocator connectionFactoryLocator = connectionFactoryLocator (); UsersConnectionRepository usersConnectionRepository = getUsersConnectionRepository (connectionFactoryLocator); ((InMemoryUsersConnectionRepository) משתמשיםConnectionRepository) .setConnectionSignUp (facebookConnectionSignup); להחזיר ProviderSignInController חדש (connectionFactoryLocator, usersConnectionRepository, חדש FacebookSignInAdapter ()); } ConnectionFactoryLocator פרטית connectionFactoryLocator () {ConnectionFactoryRegistry הרישום = ConnectionFactoryRegistry חדש (); registry.addConnectionFactory (FacebookConnectionFactory חדש (appId, appSecret)); רישום החזר; } משתמשים פרטייםConnectionRepository getUsersConnectionRepository (ConnectionFactoryLocator connectionFactoryLocator) {להחזיר InMemoryUsersConnectionRepository חדש (connectionFactoryLocator); }}

בואו נסתכל היטב על התצורה החדשה:

  • אנו משתמשים ב- ProviderSignInController כדי לאפשר את האימות של פייסבוק, שזקוק לשני דברים:

    ראשית, א ConnectionFactoryLocator רשום כ FacebookConnectionFactory עם מאפייני פייסבוק שהגדרנו קודם.

    שנית, an InMemoryUsersConnectionRepository.

  • על ידי שליחת הודעה ל "/ כניסה / פייסבוק”- בקר זה ייזום כניסה למשתמש באמצעות ספק השירות של פייסבוק
  • אנו מקימים א מתאם SignIn כדי לטפל בהיגיון הכניסה ביישום שלנו
  • ואנחנו מקימים גם א ConnectionSignUp לטפל בהרשמת משתמשים באופן מרומז כאשר הם מאמתים לראשונה בפייסבוק

6. מתאם הכניסה

במילים פשוטות, מתאם זה מהווה גשר בין הבקר שלמעלה - המניע את זרימת הכניסה למשתמשים בפייסבוק - ליישום המקומי הספציפי שלנו:

מחלקה ציבורית FacebookSignInAdapter מיישמת את SignInAdapter {@Override public String signIn (String localUserId, חיבור חיבור, בקשת NativeWebRequest) {SecurityContextHolder.getContext (). setAuthentication (new UsernamePasswordAuthenticationToken (connection.getDisplayName (), null, Arrays. Arrays. ")))); החזר אפס; }}

שים לב שלמשתמשים המחוברים באמצעות פייסבוק יהיה תפקיד משתמש פייסבוק, בעוד שמשתמשים המחוברים באמצעות טופס יקבלו תפקיד מִשׁתַמֵשׁ.

7. הרשמה לחיבור

כאשר משתמש מאמת בפייסבוק בפעם הראשונה, אין לו חשבון קיים ביישום שלנו.

זו הנקודה בה עלינו ליצור את החשבון באופן אוטומטי עבורם; אנחנו הולכים להשתמש ב- ConnectionSignUp כדי להניע את ההיגיון הזה של יצירת משתמשים:

@Service מחלקה ציבורית FacebookConnectionSignup מיישם את ConnectionSignUp {@ UserRepository פרטי פרטי מאושר userRepository; @Override ציבורי מחרוזת (חיבור חיבור) {משתמש משתמש = משתמש חדש (); user.setUsername (connection.getDisplayName ()); user.setPassword (randomAlphabetic (8)); userRepository.save (user); להחזיר user.getUsername (); }}

כפי שאתה יכול לראות, יצרנו חשבון עבור המשתמש החדש - באמצעות שלו הצג שם כשם משתמש.

8. חזית הקצה

לבסוף, בואו נסתכל על הקצה הקדמי שלנו.

כעת נקבל תמיכה בשני זרמי האימות האלה - כניסה לטופס ופייסבוק - בדף הכניסה שלנו:

 יצאת מהחשבון אירעה שגיאה, אנא נסה שוב 

לבסוף - הנה ה index.html:

שם משתמש

להתנתק

רשויות משתמשים

שים לב כיצד דף אינדקס זה מציג שמות משתמש וסמכויות.

וזהו - כעת יש לנו שתי דרכים לאמת את היישום.

9. מסקנה

במאמר מהיר זה למדנו כיצד להשתמש אביב-חברתי-פייסבוק ליישום זרימת אימות משנית ליישום שלנו.

וכמובן, כמו תמיד, קוד המקור זמין במלואו ב- GitHub.


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