Uw wachtwoord bijwerken

Dit artikel maakt deel uit van een reeks: • Tutorial Spring Security Registration

• Het registratieproces met Spring Security

• Registratie - Activeer een nieuw account via e-mail

• Spring Security Registration - Verzend de verificatie-e-mail opnieuw

• Registratie met Spring Security - Wachtwoordcodering

• De registratie-API wordt RESTful

• Spring Security - Reset uw wachtwoord

• Registratie - Wachtwoordsterkte en regels

• Uw wachtwoord bijwerken (huidig ​​artikel)

1. Overzicht

In dit korte artikel zullen we een eenvoudige "Verander mijn eigen wachtwoord" -functionaliteit implementeren die beschikbaar is voor de gebruiker nadat ze zich hebben geregistreerd en ingelogd.

2. Clientzijde - Pagina Mijn wachtwoord wijzigen

Laten we eens kijken naar de zeer eenvoudige pagina aan de clientzijde:

 Wachtwoord komt niet overeen Wachtwoord wijzigen var serverContext = [[@ {/}]]; functie savePass () {var pass = $ ("# pass"). val (); var valid = pass == $ ("# passConfirm"). val (); if (! geldig) {$ ("# error"). show (); terugkeren; } $ .post (serverContext + "user / updatePassword", {wachtwoord: pass, oldpassword: $ ("# oldpass"). val ()}, functie (data) {window.location.href = serverContext + "/ home. html? message = "+ data.message;}) .fail (functie (data) {$ (" # errormsg "). show (). html (data.responseJSON.message);}); } 

3. Update het gebruikerswachtwoord

Laten we nu ook de bewerking aan de serverzijde implementeren:

@PostMapping ("/ user / updatePassword") @PreAuthorize ("hasRole ('READ_PRIVILEGE')") public GenericResponse changeUserPassword (Locale locale, @RequestParam ("password") String-wachtwoord, @RequestParam ("oldpassword") String oldPassword) { Gebruiker user = userService.findUserByEmail (SecurityContextHolder.getContext (). GetAuthentication (). GetName ()); if (! userService.checkIfValidOldPassword (gebruiker, oldPassword)) {gooi nieuwe InvalidOldPasswordException (); } userService.changeUserPassword (gebruiker, wachtwoord); retourneer nieuwe GenericResponse (messages.getMessage ("message.updatePasswordSuc", null, locale)); }

Merk op hoe de methode is beveiligd via het @PreAuthorize annotatie, aangezien het hoort alleen toegankelijk voor ingelogde gebruikers.

4. API-tests

Laten we tot slot de API gebruiken met enkele API-tests om er zeker van te zijn dat alles goed werkt; we beginnen met de eenvoudige configuratie van de test en de data-initialisatie:

@RunWith (SpringJUnit4ClassRunner.class) @ContextConfiguration (classes = {ConfigTest.class, PersistenceJPAConfig.class}, loader = AnnotationConfigContextLoader.class) openbare klasse ChangePasswordApiTest {private final String URL_PREFIX = "// local; private uiteindelijke string-URL = URL_PREFIX + "/ user / updatePassword"; @Autowired privé UserRepository userRepository; @Autowired privé PasswordEncoder wachtwoordEncoder; FormAuthConfig formConfig = nieuw FormAuthConfig (URL_PREFIX + "/ login", "gebruikersnaam", "wachtwoord"); @Before public void init () {User user = userRepository.findByEmail ("[e-mail beschermd]"); if (gebruiker == null) {gebruiker = nieuwe gebruiker (); user.setFirstName ("Test"); user.setLastName ("Test"); user.setPassword (passwordEncoder.encode ("test")); user.setEmail ("[e-mail beschermd]"); user.setEnabled (true); userRepository.save (gebruiker); } else {user.setPassword (passwordEncoder.encode ("test")); userRepository.save (gebruiker); }}}

Laten we het nu proberen wachtwoord wijzigen voor een aangemelde gebruiker:

@Test openbare ongeldig gegevenLoggedInUser_whenChangingPassword_thenCorrect () {RequestSpecification request = RestAssured.given (). Auth () .form ("[email protected]", "test", formConfig); Mapparams = nieuwe HashMap (); params.put ("oudwachtwoord", "test"); params.put ("wachtwoord", "newtest"); Antwoordantwoord = request.with (). Params (params) .post (URL); assertEquals (200, response.statusCode ()); assertTrue (response.body (). asString (). bevat ("Wachtwoord succesvol bijgewerkt")); }

Vervolgens - laten we proberen het wachtwoord te wijzigen een verkeerd oud wachtwoord gegeven:

@Test openbare ongeldig gegevenWrongOldPassword_whenChangingPassword_thenBadRequest () {RequestSpecification request = RestAssured.given (). Auth () .form ("[email protected]", "test", formConfig); Mapparams = nieuwe HashMap (); params.put ("oldpassword", "abc"); params.put ("wachtwoord", "newtest"); Antwoordantwoord = request.with (). Params (params) .post (URL); assertEquals (400, response.statusCode ()); assertTrue (response.body (). asString (). bevat ("Ongeldig oud wachtwoord")); }

Eindelijk - laten we proberen het wachtwoord te wijzigen zonder authenticatie:

@Test openbare leegte gegevenNotAuthenticatedUser_whenChangingPassword_thenRedirect () {Map params = new HashMap (); params.put ("oldpassword", "abc"); params.put ("wachtwoord", "xyz"); Antwoordantwoord = RestAssured.with (). Params (params) .post (URL); assertEquals (302, response.statusCode ()); assertFalse (response.body (). asString (). bevat ("Wachtwoord succesvol bijgewerkt")); }

Merk op hoe we - voor elke test - een FormAuthConfig om de authenticatie af te handelen.

We stellen ook het wachtwoord opnieuw in via in het() om ervoor te zorgen dat we het juiste wachtwoord gebruiken voordat we testen.

5. Conclusie

En dat is een wrap - een eenvoudige manier om de gebruiker in staat te stellen zijn eigen wachtwoord te wijzigen na registratie en inloggen op de applicatie.

De volledige implementatie van deze tutorial is te vinden in het github-project - dit is een op Eclipse gebaseerd project, dus het zou gemakkelijk te importeren en uit te voeren moeten zijn zoals het is.

« Vorige registratie - Wachtwoordsterkte en regels