מעדכן את הסיסמה שלך

מאמר זה הוא חלק מסדרה: • מדריך רישום אבטחה באביב

• תהליך ההרשמה עם אבטחת אביב

• הרשמה - הפעל חשבון חדש בדוא"ל

• רישום אבטחה באביב - שלח שוב דוא"ל אימות

• הרשמה באבטחת אביב - קידוד סיסמאות

• ממשק ה- API לרישום הופך ל- RESTful

• אבטחת אביב - אפס את הסיסמה שלך

• רישום - חוזק סיסמא וכללים

• עדכון הסיסמה (המאמר הנוכחי)

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

במאמר מהיר זה נשתמש בפונקציונליות פשוטה של ​​"שנה את הסיסמה שלי" הזמינה למשתמש לאחר הרשמתם והתחברותם.

2. צד הלקוח - שנה את דף הסיסמה שלי

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

 אי התאמה בסיסמא שינוי סיסמה var serverContext = [[@ {/}]]; פונקציה savePass () {var pass = $ ("# pass"). val (); var valid = pass == $ ("# passConfirm"). val (); אם (! תקף) {$ ("# error"). show (); לַחֲזוֹר; } $ .post (serverContext + "user / updatePassword", {password: pass, oldpassword: $ ("# oldpass"). val ()}, function (data) {window.location.href = serverContext + "/ home. html? message = "+ data.message;}). fail (function (data) {$ (" # errormsg "). show (). html (data.responseJSON.message);}); } 

3. עדכן את סיסמת המשתמש

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

@PostMapping ("/ user / updatePassword") @PreAuthorize ("hasRole ('READ_PRIVILEGE')") שינוי GenericResponse ציבורי UserPassword (אזור האזור, @RequestParam ("סיסמה") סיסמת מחרוזת, @RequestParam ("סיסמה ישנה") משתמש משתמש = userService.findUserByEmail (SecurityContextHolder.getContext (). GetAuthentication (). GetName ()); if (! userService.checkIfValidOldPassword (user, oldPassword)) {זרוק InvalidOldPasswordException חדש (); } userService.changeUserPassword (משתמש, סיסמה); להחזיר GenericResponse חדש (messages.getMessage ("message.updatePasswordSuc", null, locale)); }

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

4. מבחני API

לבסוף, בואו נצרוך את ה- API עם כמה בדיקות API כדי לוודא שהכל עובד בסדר; נתחיל עם התצורה הפשוטה של ​​הבדיקה ואתחול הנתונים:

@RunWith (SpringJUnit4ClassRunner.class) @ContextConfiguration (classes = {ConfigTest.class, PersistenceJPAConfig.class}, loader = AnnotationConfigContextLoader.class) מחלקה ציבורית ChangePasswordApiTest {פרטית סופית מחרוזת URL_PREFIX = "80 /" local " כתובת פרטית מחרוזת סופית פרטית = URL_PREFIX + "/ user / updatePassword"; @ UserRepository פרטית אוטומטית userRepository; @Autowired פרטי PasswordEncoder passwordEncoder; FormAuthConfig formConfig = FormAuthConfig חדש (URL_PREFIX + "/ login", "שם משתמש", "סיסמה"); @ לפני init בטל פומבי () {משתמש משתמש = userRepository.findByEmail ("[מוגן באמצעות דוא"ל]"); אם (משתמש == null) {משתמש = משתמש חדש (); user.setFirstName ("מבחן"); user.setLastName ("מבחן"); user.setPassword (passwordEncoder.encode ("מבחן")); user.setEmail ("[דוא"ל מוגן]"); user.setEnabled (נכון); userRepository.save (user); } אחר {user.setPassword (passwordEncoder.encode ("מבחן")); userRepository.save (user); }}}

עכשיו - בואו ננסה שנה סיסמה עבור משתמש מחובר:

@Test הציבור בטל givenLoggedInUser_whenChangingPassword_thenCorrect () {RequestSpecification בקשה = RestAssured.given (). Auth () .form ("[מוגן באמצעות דוא"ל]," test ", formConfig); Params מפה = HashMap חדש (); params.put ("oldpassword", "test"); params.put ("סיסמה", "חדש ביותר"); תגובה תגובה = request.with (). Params (params) .post (URL); assertEquals (200, response.statusCode ()); assertTrue (response.body (). asString (). מכיל ("הסיסמה עודכנה בהצלחה")); }

הבא - בואו ננסה לשנות סיסמה קיבלה סיסמה ישנה שגויה:

@Test ציבורי בטל givenWrongOldPassword_whenChangingPassword_thenBadRequest () {RequestSpecification request = RestAssured.given (). Auth () .form ("[email protected]", "test", formConfig); Params מפה = HashMap חדש (); params.put ("oldpassword", "abc"); params.put ("סיסמה", "חדש ביותר"); תגובה תגובה = request.with (). Params (params) .post (URL); assertEquals (400, response.statusCode ()); assertTrue (response.body (). asString (). מכיל ("סיסמה ישנה לא חוקית")); }

לסיום - בואו ננסה לשנות סיסמה ללא אימות:

@Test public void givenNotAuthenticatedUser_whenChangingPassword_thenRedirect () {Map params = HashMap new (); params.put ("oldpassword", "abc"); params.put ("סיסמה", "xyz"); תגובת תגובה = RestAssured.with (). Params (params) .post (URL); assertEquals (302, response.statusCode ()); assertFalse (response.body (). asString (). מכיל ("הסיסמה עודכנה בהצלחה")); }

שים לב כיצד - לכל בדיקה - אנו מספקים FormAuthConfig לטפל באימות.

אנו גם מאפסים את הסיסמה באמצעות init () כדי לוודא שאנחנו משתמשים בסיסמה הנכונה לפני הבדיקה.

5. מסקנה

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

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

« רישום קודם - חוזק סיסמא וכללים

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