אביב אבטחה - אבטחה אין, מסנן ללא, היתר גישה הכל

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

Spring Security מספק מספר מנגנונים להגדרת תבנית בקשה כלא מאובטחת או המאפשרת כל גישה. בהתאם לכל אחד מהמנגנונים הללו - המשמעות היא שלא להפעיל את שרשרת מסנני האבטחה בדרך זו או להפעיל את שרשרת המסננים ולאפשר גישה.

2. גישה = "permitAll"

הגדרת אלמנט עם גישה = "permitAll" יגדיר את ההרשאה כך שכל הבקשות יהיו מוּתָר בדרך המסוימת הזו:

לחלופין, באמצעות תצורת Java:

http.authorizeRequests (). antMatchers ("/ login *"). permitAll ();

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

3. מסננים = "אין"

זו תכונה שלפני אביב 3.1 שהייתה הוצא משימוש והוחלף באביב 3.1.

ה פילטרים מאפיין משבית את שרשרת מסנני Spring Security לחלוטין בנתיב הבקשה המסוים הזה:

זה עלול לגרום לבעיות כאשר עיבוד הבקשה ידרוש פונקציונליות מסוימת של Spring Security.

מכיוון שמדובר בתכונה שהוצא משימוש גרסאות אביב חדשות מ -3.0, השימוש בה עם Spring 3.1 יביא לחריגת זמן ריצה בעת ההפעלה:

חמור: אתחול ההקשר נכשל org.springframework.beans.factory.parsing.BeanDefinitionParsingException: בעיית תצורה: השימוש ב- "filters = 'none'" כבר אינו נתמך. אנא הגדיר אלמנט נפרד עבור התבנית שברצונך לכלול והשתמש במאפיין "אבטחה = 'אין' '. משאב פוגע: משאב נתיב מחלקה [webSecurityConfig.xml] בכתובת o.s.b.f.p.FailFastProblemReporter.error (FailFastProblemReporter.java:68)

4. אבטחה = "אין"

כפי שראינו בהודעת השגיאה לעיל, אביב 3.1 מחליף מסננים = "אין" עם ביטוי חדש - אבטחה = "אין".

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

בפועל זה ייראה כמו:

או עם תצורת Java:

web.ignoring (). antMatchers ("/ resources / **");

במקום הישן:

דומה ל מסננים = "אין", זה גם יבטל לחלוטין את שרשרת מסנני האבטחה עבור נתיב הבקשה ההוא - לכן כאשר הבקשה תטופל ביישום, תכונות Spring Security לא יהיו זמינות.

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

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

לחלופין, access = 'IS_AUTHENTICATED_ANONYMOUSLY' יכול לשמש כדי לאפשר גישה אנונימית.

5. אזהרות ל אבטחה = "אין"

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

שים לב גם, אם אֵלֵמֶנט אינו מציין דפוס, ואז כברירת מחדל, שממפה לדפוס ההתאמה האוניברסלי - "/ **" - אז שוב, אלמנט זה צריך להיות אחרון. אם סדר האלמנטים אינו נכון, ה- יצירת שרשרת מסנני האבטחה תיכשל:

נגרמת על ידי: java.lang.IllegalArgumentException: דפוס התאמה אוניברסלי ('/ **') מוגדר לפני דפוסים אחרים בשרשרת המסננים, מה שגורם להתעלמות מהם. אנא בדוק את ההזמנה במרחב השמות שלך או בתצורת שעועית FilterChainProxy בכתובת o.s.s.c.h.DefaultFilterChainValidator.checkPathOrder (DefaultFilterChainValidator.java:49) בכתובת o.s.s.c.h.DefaultFilterChainValidator.validate (DefaultFilterChainValidator.java).

6. מסקנה

מאמר זה דן באפשרויות לאפשר גישה לנתיב עם Spring Security - תוך התמקדות בהבדלים בין מסננים = "none", אבטחה = "none" וגישה = "permitAll".

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


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