מבוא ל- Java Config לאבטחת אביב

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

מאמר זה הוא מבוא לתצורת Java לאבטחת אביב המאפשר למשתמשים להגדיר בקלות את Spring Security ללא שימוש ב- XML.

תצורת ג'אווה נוספה למסגרת האביב באביב 3.1 והורחבה לאביב אבטחה באביב 3.2 והיא מוגדרת בכיתה שהוסרה @תְצוּרָה.

2. הגדרת Maven

כדי להשתמש באביב אבטחה בפרויקטים של Maven, ראשית עלינו לקבל את אביב ליבת אבטחה תלות בפרויקט pom.xml:

 org.springframework.security spring-security-core 5.3.3.RELEASE 

הגרסה האחרונה תמיד נמצאת כאן.

3. אבטחת אינטרנט עם תצורת Java

נתחיל בדוגמה בסיסית לתצורת Java של Spring Security:

המחלקה הציבורית @EnableWebSecurity SecurityConfig מרחיב את WebSecurityConfigurerAdapter {@Autowired public void configureGlobal (AuthenticationManagerBuilder auth) זורק חריג {auth.inMemoryAuthentication (). WithUser ("משתמש"). סיסמה (passwordEncoder () ")." מִשׁתַמֵשׁ"); }}

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

@Bean PasswordEncoder הציבורי passwordEncoder () {להחזיר BCryptPasswordEncoder חדש (); }

4. אבטחת HTTP

כדי לאפשר אבטחת HTTP באביב, עלינו להאריך את ה- מתאם WebSecurityConfigurer כדי לספק תצורת ברירת מחדל ב- הגדר (HttpSecurity http) שיטה:

הגדר חלל מוגן מוגדר (HttpSecurity http) זורק חריג {http.authorizeRequests () .anyRequest (). מאומת (). ו- (). httpBasic (); } 

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

כמו כן, הוא דומה בדיוק לתצורת ה- XML ​​הבאה:

5. כניסה לטופס

מעניין ש- Spring Security יוצר דף כניסה באופן אוטומטי, בהתבסס על התכונות המופעלות ומשתמש בערכים סטנדרטיים עבור כתובת ה- URL שמעבדת את הכניסה שהוגשה:

הגדר חלל מוגן מוגדר (HttpSecurity http) זורק חריג {http.authorizeRequests () .anyRequest (). מאומת () .and (). formLogin () .loginPage ("/ login"). permitAll (); }

כאן דף הכניסה שנוצר אוטומטית נוח לעלות במהירות.

6. אישור עם תפקידים

בואו כעת להגדיר כמה הרשאות פשוטות בכל כתובת אתר באמצעות תפקידים:

הגדר חלל מוגן (HttpSecurity http) זורק חריג {http.authorizeRequests () .antMatchers ("/", "/home").access("hasRole('USER ')") .antMatchers ("/ admin / **") .hasRole ("ADMIN"). ו- () // כמה קריאות שיטה נוספות. formLogin (); }

שימו לב כיצד אנו משתמשים בשני ה- API הבטוח לסוג - hasRole - אך גם ה- API מבוסס הביטוי, דרך גִישָׁה.

7. יציאה

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

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

הנה תצורת התנתק פשוטה:

הגדר חלל מוגן (HttpSecurity http) זורק חריג {http.logout (); }

עם זאת, אם ברצונך לקבל שליטה רבה יותר על המטפלים הזמינים, הנה ייראה יישום מלא יותר:

הגדר חלל מוגן מוגדר (HttpSecurity http) זורק חריג {http.logout (). logoutUrl ("/ my / logout") .logoutSuccessUrl ("/ my / index") .logoutSuccessHandler (logoutSuccessHandler) .invalidateHttpSession (true) .addLogoutHandler). .deleteCookies (cookieNamesToClear). ו- () // כמה שיחות שיטה אחרות}

8. אימות

בואו נסתכל על דרך אחרת לאפשר אימות באמצעות Spring Security.

8.1. אימות בזיכרון

נתחיל בתצורה פשוטה בזיכרון:

@Autowired חלל ציבורי configureGlobal (AuthenticationManagerBuilder auth) זורק Exception {auth.inMemoryAuthentication () .withUser ("user"). Password (passwordEncoder (). Encode ("password")). תפקידים ("USER"). (). withUser ("admin"). סיסמה (passwordEncoder (). קידוד ("סיסמה")). תפקידים ("USER", "ADMIN"); } 

8.2. אימות JDBC

כדי להעביר את זה ל- JDBC, כל שעליך לעשות הוא להגדיר מקור נתונים ביישום - ולהשתמש בו ישירות:

@ מקור נתונים פרטי של נתונים מקוריים; @Autowired חלל ציבורי configureGlobal (AuthenticationManagerBuilder auth) זורק חריג {auth.jdbcAuthentication (). DataSource (dataSource) .withDefaultSchema () .withUser ("משתמש"). סיסמא (passwordEncoder (). קידוד ("סיסמה")) תפקידים (תפקידים). "USER"). ו- () .withUser ("admin"). סיסמה (passwordEncoder (). קידוד ("סיסמה")). תפקידים ("USER", "ADMIN"); } 

כמובן, עם שתי הדוגמאות הנ"ל, עלינו גם להגדיר את קוד מקודד שעועית כמתואר בסעיף 3.

9. מסקנה

במדריך מהיר זה, עברנו על היסודות של Java Configuration for Spring Security והתמקדנו בדוגמאות הקוד הממחישות את תרחישי התצורה הפשוטים ביותר.


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