@Test(expected = IllegalArgumentException.class) public void setDefaultPasswordEncoderForMatchesWhenNullThenIllegalArgumentException() { this.passwordEncoder.setDefaultPasswordEncoderForMatches(null); }
@Test public void matchesWhenCustomDefaultPasswordEncoderForMatchesThenDelegates() { String encodedPassword = "{unmapped}" + this.rawPassword; this.passwordEncoder.setDefaultPasswordEncoderForMatches(this.invalidId); assertThat(this.passwordEncoder.matches(this.rawPassword, encodedPassword)).isFalse(); verify(this.invalidId).matches(this.rawPassword, encodedPassword); verifyZeroInteractions(this.bcrypt, this.noop); }
@Bean public PasswordEncoder passwordEncoder() { // set up the list of supported encoders and their prefixes PasswordEncoder defaultEncoder = new StandardPasswordEncoder(); Map<String, PasswordEncoder> encoders = new HashMap<>(); encoders.put("bcrypt", new BCryptPasswordEncoder()); encoders.put("scrypt", new SCryptPasswordEncoder()); encoders.put("noop", NoOpPasswordEncoder.getInstance()); DelegatingPasswordEncoder passwordEncoder = new DelegatingPasswordEncoder("bcrypt", encoders); passwordEncoder.setDefaultPasswordEncoderForMatches(defaultEncoder); return passwordEncoder; }
@Bean @ConditionalOnMissingBean public PasswordEncoder passwordEncoder(FlowableIdmProperties idmProperties) { PasswordEncoder encoder; String encoderType = idmProperties.getPasswordEncoder(); if (Objects.equals("spring_bcrypt", encoderType)) { encoder = new BCryptPasswordEncoder(); } else if (encoderType != null && encoderType.startsWith("spring_delegating")) { encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder(); if (encoderType.equals("spring_delegating_bcrypt")) { ((DelegatingPasswordEncoder) encoder).setDefaultPasswordEncoderForMatches(new BCryptPasswordEncoder()); } else if (encoderType.equals("spring_delegating_noop")) { ((DelegatingPasswordEncoder) encoder).setDefaultPasswordEncoderForMatches(NoOpPasswordEncoder.getInstance()); } } else { encoder = NoOpPasswordEncoder.getInstance(); } return encoder; }