@Override public MapReactiveUserDetailsService getObject() throws Exception { Collection<UserDetails> users = userDetails.getObject(); return new MapReactiveUserDetailsService(users); }
/** * Creates a new instance * @param users the {@link UserDetails} to use */ public MapReactiveUserDetailsService(Collection<UserDetails> users) { Assert.notEmpty(users, "users cannot be null or empty"); this.users = users.stream().collect(Collectors.toConcurrentMap( u -> getKey(u.getUsername()), Function.identity())); }
@Test public void updatePassword() { users.updatePassword(USER_DETAILS, "new").block(); assertThat(users.findByUsername(USER_DETAILS.getUsername()).block().getPassword()).isEqualTo("new"); } }
@Test public void findByUsernameWhenDifferentCaseThenReturns() { assertThat((users.findByUsername("uSeR").block())).isEqualTo(USER_DETAILS); }
@Test public void findByUsernameWhenNotFoundThenEmpty() { assertThat((users.findByUsername("notfound"))).isEqualTo(Mono.empty()); }
@Test(expected = IllegalArgumentException.class) public void constructorNullUsers() { Collection<UserDetails> users = null; new MapReactiveUserDetailsService(users); }
@Override public Mono<UserDetails> findByUsername(String username) { String key = getKey(username); UserDetails result = users.get(key); return result == null ? Mono.empty() : Mono.just(User.withUserDetails(result).build()); }
@Test public void findByUsernameWhenFoundThenReturns() { assertThat((users.findByUsername(USER_DETAILS.getUsername()).block())).isEqualTo(USER_DETAILS); }
@Test(expected = IllegalArgumentException.class) public void constructorEmptyUsers() { Collection<UserDetails> users = Collections.emptyList(); new MapReactiveUserDetailsService(users); }
@Override public Mono<UserDetails> findByUsername(String username) { String key = getKey(username); UserDetails result = users.get(key); return result == null ? Mono.empty() : Mono.just(User.withUserDetails(result).build()); }
@Test public void findByUsernameWhenClearCredentialsThenFindByUsernameStillHasCredentials() { User foundUser = users.findByUsername(USER_DETAILS.getUsername()).cast(User.class).block(); assertThat(foundUser.getPassword()).isNotEmpty(); foundUser.eraseCredentials(); assertThat(foundUser.getPassword()).isNull(); foundUser = users.findByUsername(USER_DETAILS.getUsername()).cast(User.class).block(); assertThat(foundUser.getPassword()).isNotEmpty(); }
@Bean public static ReactiveUserDetailsService userDetailsService() { return new MapReactiveUserDetailsService(PasswordEncodedUser.user(), PasswordEncodedUser.admin()); } }
/** * Creates a new instance * @param users the {@link UserDetails} to use */ public MapReactiveUserDetailsService(Collection<UserDetails> users) { Assert.notEmpty(users, "users cannot be null or empty"); this.users = users.stream().collect(Collectors.toConcurrentMap( u -> getKey(u.getUsername()), Function.identity())); }
@Bean public MapReactiveUserDetailsService userDetailsService() { return new MapReactiveUserDetailsService(User.withUsername("user") .password("{noop}password") .roles("USER") .build() ); } }
@Override public Mono<UserDetails> updatePassword(UserDetails user, String newPassword) { return Mono.just(user) .map(u -> User.withUserDetails(u) .password(newPassword) .build() ) .doOnNext(u -> { String key = getKey(user.getUsername()); this.users.put(key, u); }); }
@Bean public MapReactiveUserDetailsService reactiveUserDetailsService() { UserDetails user = User.withUsername("user").password("{noop}password").roles("USER").build(); return new MapReactiveUserDetailsService(user); }
@Override public Mono<UserDetails> updatePassword(UserDetails user, String newPassword) { return Mono.just(user) .map(u -> User.withUserDetails(u) .password(newPassword) .build() ) .doOnNext(u -> { String key = getKey(user.getUsername()); this.users.put(key, u); }); }
@Bean public ReactiveUserDetailsService userDetailsService(PasswordEncoder encoder) { return new MapReactiveUserDetailsService(User.withUsername("user") .password(encoder.encode("password")) .roles("USER") .build() ); }
/** * Creates a new instance * @param users the {@link UserDetails} to use */ public MapReactiveUserDetailsService(Collection<UserDetails> users) { Assert.notEmpty(users, "users cannot be null or empty"); this.users = users.stream().collect(Collectors.toConcurrentMap( u -> getKey(u.getUsername()), Function.identity())); }
@Override public MapReactiveUserDetailsService getObject() throws Exception { Collection<UserDetails> users = userDetails.getObject(); return new MapReactiveUserDetailsService(users); }