אבטחת אביב - התאמה אישית של העמוד 403 אסור / גישה שנדחתה

1. הקדמה

במאמר זה נראה כיצד התאם אישית את הדף שנדחה גישה בפרויקט Spring Security.

ניתן להשיג זאת באמצעות תצורת Spring Security או תצורת יישום אינטרנט ב- web.xml קוֹבֶץ.

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

2. JSP מותאם אישית

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

על מנת להחליף את דף תגובת הסטטוס של אביב 403 בדף מותאם אישית, בואו ניצור קודם JSP קובץ שנקרא accessDenied.jsp:

מצטערים, אין לך הרשאה להציג דף זה.

נְקִישָׁה כאן כדי לחזור לדף הבית.

3. תצורת אבטחה באביב

כברירת מחדל, ל- Spring Security יש ExceptionTranslationFilter מוגדר המטפל בחריגים מהסוג AuthenticationException ו AccessDeniedException. האחרון נעשה באמצעות נכס שנקרא accessDeniedHandler, המשתמשת ב AccessDeniedHandlerImpl מעמד.

על מנת להתאים אישית את ההתנהגות הזו לשימוש בדף שלנו שיצרנו לעיל, עלינו לבטל את המאפיינים של ה- ExceptionTranslationFilter מעמד. ניתן לעשות זאת באמצעות תצורת Java או תצורת XML.

3.1. גישה לדף שנדחה

באמצעות Java, אנו יכולים להתאים אישית את תהליך הטיפול בשגיאות 403 באמצעות accessDeniedPage () אוֹ accessDeniedHandler () שיטות תוך הגדרת התצורה של HttpSecurity אֵלֵמֶנט.

בואו ניצור תצורת אימות המגבילה את “/ מנהל / **"כתובות אתרים ל- מנהל תפקיד ומגדיר את הדף שנדחה מגישה למנהג שלנו accessDenied.jsp עמוד:

התצורה הריקה מוגנת @Override (HttpSecurity הסופי http) זורקת חריג {http // ... .and () .exceptionHandling (). AccessDeniedPage ("/ accessDenied.jsp"); }

בואו נסתכל על תצורת ה- XML ​​המקבילה לדף שנדחה מגישה:

3.2. המטפל בגישה נדחתה

שימוש במטפל שנמנע מגישה במקום בדף יש יתרון בכך שאנחנו יכולים להגדיר לוגיקה מותאמת אישית שתבוצע לפני הפניה לדף 403. לזה, עלינו ליצור מחלקה המיישמת את AccessDeniedHandler מִמְשָׁק ועוקף את ידית() שיטה.

בואו ניצור מותאם אישית AccessDeniedHandler מחלקה שמתעדת הודעת אזהרה לכל ניסיון גישה שנדחתה המכיל את המשתמש שביצע את הניסיון ואת כתובת ה- URL המוגנת אליה ניסו לגשת:

מחלקה ציבורית CustomAccessDeniedHandler מיישמת את AccessDeniedHandler {Public logic final Logger LOG = Logger.getLogger (CustomAccessDeniedHandler.class); @Override ידית חלל ציבורית (HttpServletRequest בקשה, HttpServletResponse תגובה, AccessDeniedException exc) זורק IOException, ServletException {Authentication auth = SecurityContextHolder.getContext (). GetAuthentication (); אם (auth! = null) {LOG.warn ("משתמש:" + auth.getName () + "ניסה לגשת לכתובת האתר המוגנת:" + request.getRequestURI ()); } response.sendRedirect (request.getContextPath () + "/ accessDenied"); }}

בתצורת האבטחה, נגדיר את השעועית ונקבע את המנהג AccessDeniedHandler:

@Bean AccessDeniedHandler לציבור accessDeniedHandler () {להחזיר CustomAccessDeniedHandler חדש (); } // ... .exceptionHandling (). accessDeniedHandler (accessDeniedHandler ()); 

אם אנו רוצים להגדיר את CustomAccessDeniedHandler בכיתה שהוגדרה לעיל באמצעות XML, התצורה תיראה שונה במקצת:

4. תצורת יישום

טיפול בשגיאת הגישה שנדחתה יכול להיעשות באמצעות web.xml קובץ של יישום אינטרנט, על ידי הגדרת קובץ דף שגיאה תָג. זה מכיל שתי תגי משנה הנקראים קוד שגיאה, שמציין את קוד הסטטוס שיש ליירט, ו מקום, המסמל את כתובת האתר אליה יופנה המשתמש מחדש במקרה שנתקל בקוד השגיאה:

 403 / גישה נדחה 

אם לאפליקציה אין web.xml כפי שקורה במקרה של Spring Boot, הערות האביב אינן מספקות כרגע אלטרנטיבה מדויקת דף שגיאה תָג. על פי תיעוד האביב, במקרה זה, הגישה המומלצת היא להשתמש בשיטות accessDeniedPage () ו accessDeniedHandler () מוצג בסעיף 3.

5. מסקנה

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

את קוד המקור השלם של המאמר ניתן למצוא בפרויקט GitHub.


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