Używam Wiosna danych Boot REST utrzymują moje User
podmiotyRunning @HandleBeforeCreate Po zatwierdzeniu podmiotu w Spring Boot Danych REST
@Entity
public class User {
@Id
@GeneratedValue
private long id;
@NotEmpty
private String firstName;
@NotEmpty
private String lastName;
@NotEmpty
private String email;
@Size(min = 5, max = 20)
private String password;
// getters and setters
}
pomocą repozytorium
public interface UserRepository extends CrudRepository<User, Long> {}
Co chcę zrobić sprawdza użytkowników: POST
ed użytkowników:
@Configuration
public class CustomRestConfiguration extends SpringBootRepositoryRestMvcConfiguration {
@Autowired
private Validator validator;
@Override
protected void configureValidatingRepositoryEventListener(ValidatingRepositoryEventListener validatingListener) {
validatingListener.addValidator("beforeCreate", validator);
}
}
i tylko później hash hasła użytkownika przed zapisaniem go w DB:
@Component
@RepositoryEventHandler(User.class)
public class UserRepositoryEventHandler {
private PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
@HandleBeforeCreate
public void handleUserCreate(User user) {
user.setPassword(passwordEncoder.encode(user.getPassword()));
}
}
Okazuje się jednak, walidacja odbywa się po mieszaja hasło i wskutek to nie ze względu na hashed hasło jest zbyt długa.
Czy istnieje sposób, aby nakazać Spring wykonać walidację najpierw i tylko wtedy hash hasłem? Wiem, że sam mógłbym napisać kontroler i określić wszystko w drobny sposób, ale wolałbym go zostawić w ostateczności.
Jakiej wersji Spring Ramp/Data REST używasz? Właśnie przetestowałem to na mojej aplikacji i kiedy umieściłem punkt przerwania w obsłudze Repo i 'SizeValidatorForCharSequence', to w walidatorze trafia przed handler, więc dla mnie działa zgodnie z oczekiwaniami. Używam Spring Boot 1.2.5 –
@BohuslavBurghardt Jestem na Spring Boot '1.2.6.RELEASE' i zarządza on wszystkimi innymi wersjami zależności. Naprawdę nie wiem, jak umieścić punkt przełomowy na walidatorze, ponieważ wypromowuję ten (jak sądzę) stworzony przez JPA. Zdarza się gdzieś za kulisami. Czy spróbuję to zrobić? – Wojtek
@Wojtek, Czy istnieje jakikolwiek inny hak, za pomocą którego mogę uzyskać kontrolę po pomyślnym sprawdzeniu fasoli (przed utrwaleniem encji)? – masT