Jelszavának frissítése

Ez a cikk egy sorozat része: • Tavaszi biztonsági regisztráció bemutató

• A regisztráció folyamata tavaszi biztonsággal

• Regisztráció - Új fiók aktiválása e-mailben

• Tavaszi biztonsági regisztráció - Ellenőrző e-mail újraküldése

• Regisztráció a Spring Security-nél - Jelszó kódolás

• A Registration API RESTful lesz

• Tavaszi biztonság - állítsa vissza jelszavát

• Regisztráció - A jelszó erőssége és szabályai

• Jelszavának frissítése (aktuális cikk)

1. Áttekintés

Ebben a rövid cikkben egy egyszerű „Saját jelszó módosítása” funkciót valósítunk meg, amely a felhasználó számára elérhető a regisztráció és a bejelentkezés után.

2. Ügyféloldal - A Jelszóoldal megváltoztatása

Vessünk egy pillantást a kliens nagyon egyszerű oldalára:

 Jelszó eltérése Jelszó megváltoztatása var serverContext = [[@ {/}]]; function savePass () {var pass = $ ("# pass"). val (); var valid = pass == $ ("# passConfirm"). val (); if (! érvényes) {$ ("# hiba"). show (); Visszatérés; } $ .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. Frissítse a felhasználói jelszót

Végezzük el most a szerveroldali műveletet is:

@PostMapping ("/ user / updatePassword") @PreAuthorize ("hasRole ('READ_PRIVILEGE')" ") public GenericResponse changeUserPassword (Locale locale, @RequestParam (" password ") String jelszó, @RequestParam (" oldpassword ") String oldPassword) Felhasználó user = userService.findUserByEmail (SecurityContextHolder.getContext (). GetAuthentication (). GetName ()); if (! userService.checkIfValidOldPassword (user, oldPassword)) {dobjon új InvalidOldPasswordException (); } userService.changeUserPassword (felhasználó, jelszó); return new GenericResponse (messages.getMessage ("message.updatePasswordSuc", null, locale)); }

Figyelje meg, hogy a metódus hogyan van rögzítve a @PreAuthorize annotáció, mivel kellene csak a bejelentkezett felhasználók számára érhető el.

4. API tesztek

Végül fogyasszuk el az API-t néhány API-teszt segítségével, hogy megbizonyosodjunk arról, hogy minden rendben működik; kezdjük a teszt egyszerű konfigurálásával és az adatok inicializálásával:

@RunWith (SpringJUnit4ClassRunner.class) @ContextConfiguration (class = {ConfigTest.class, PersistenceJPAConfig.class}, loader = AnnotationConfigContextLoader.class) public class ChangePasswordApiTest {private final String 80 // local "; privát végső karakterlánc URL = URL_PREFIX + "/ user / updatePassword"; @Autowired private UserRepository userRepository; @Autowired private PasswordEncoder passwordEncoder; FormAuthConfig formConfig = új FormAuthConfig (URL_PREFIX + "/ login", "felhasználónév", "jelszó"); @A nyilvános void előtt init () {User user = userRepository.findByEmail ("[email protected]"); if (felhasználó == null) {felhasználó = új Felhasználó (); user.setFirstName ("Teszt"); user.setLastName ("Teszt"); user.setPassword (passwordEncoder.encode ("teszt")); user.setEmail ("[e-mail védett]"); user.setEnabled (true); userRepository.save (felhasználó); } else {user.setPassword (passwordEncoder.encode ("teszt")); userRepository.save (felhasználó); }}}

Most - próbáljuk meg módosítsa a bejelentkezett felhasználó jelszavát:

@Test public void givenLoggedInUser_whenChangingPassword_thenCorrect () {RequestSpecification request = RestAssured.given (). Auth () .form ("[email protected]", "test", formConfig); Térképparaméterek = new HashMap (); params.put ("régi jelszó", "teszt"); params.put ("jelszó", "newtest"); Válaszválasz = request.with (). Params (params) .post (URL); assertEquals (200, response.statusCode ()); assertTrue (response.body (). asString (). tartalmazza ("A jelszó sikeresen frissítve")); }

Következő - próbáljuk meg megváltoztatni a jelszót rossz régi jelszót adott meg:

@Test public void givenWrongOldPassword_whenChangingPassword_thenBadRequest () {RequestSpecification request = RestAssured.given (). Auth () .form ("[email protected]", "test", formConfig); Térképparaméterek = new HashMap (); params.put ("régi jelszó", "abc"); params.put ("jelszó", "newtest"); Válaszválasz = request.with (). Params (params) .post (URL); assertEquals (400, response.statusCode ()); assertTrue (response.body (). asString (). tartalmazza ("Érvénytelen régi jelszó")); }

Végül - próbáljuk meg megváltoztatni a jelszót hitelesítés nélkül:

@Test public void givenNotAuthenticatedUser_whenChangingPassword_thenRedirect () {Map params = new HashMap (); params.put ("régi jelszó", "abc"); params.put ("jelszó", "xyz"); Válaszválasz = RestAssured.with (). Params (params) .post (URL); assertEquals (302, response.statusCode ()); assertFalse (response.body (). asString (). tartalmazza ("A jelszó sikeresen frissítve")); }

Vegye figyelembe, hogy az egyes tesztekhez hogyan adjuk meg a FormAuthConfig kezelni a hitelesítést.

A jelszót a következőn keresztül is visszaállítjuk benne() hogy a teszt előtt a helyes jelszót használjuk.

5. Következtetés

És ez egy csomagolás - egy egyszerű módja annak, hogy a felhasználó az alkalmazásba való regisztráció és bejelentkezés után megváltoztassa saját jelszavát.

A teljes végrehajtása ennek az oktatóanyagnak a github projektje található meg - ez egy Eclipse alapú projekt, ezért könnyen importálhatónak és futtathatónak kell lennie.

« Korábbi regisztráció - A jelszó erőssége és szabályai