Я использую Spring Security для выполнения простой операции входа в систему и выхода из системы, и все пользователи хранятся в моей базе данных введите описание изображения здесь
проблема возникает каждый раз, когда я пытаюсь войти в систему я получаю сообщение об ошибке «Кодированный пароль не похож на BCrypt», но он закодирован в моей базе данных.
SecurityConfig. java
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private CustomUserDetailService customUserDetailService;
@Override
public void configure(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception {
authenticationManagerBuilder
.userDetailsService(customUserDetailService)
.passwordEncoder(passwordEncoder());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.antMatchers(HttpMethod.OPTIONS,"/**").permitAll()
.anyRequest().authenticated()
.and()
.httpBasic();
}
@Bean
CorsConfigurationSource corsConfigurationSource() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", new CorsConfiguration().applyPermitDefaultValues());
return source;
}
@Bean
public BCryptPasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
}
UserController. java
@RestController
@RequestMapping("/users")
@PreAuthorize("hasAnyRole('ADMIN')")
public class UserController {
@Autowired
private UserService userService;
@Autowired
private BCryptPasswordEncoder passwordEncoder;
@RequestMapping(method = RequestMethod.GET)
public Collection<User> getAllUser(){
return userService.getAllUser();
}
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public User getAllUserById(@PathVariable("id") long id){
return userService.getUserById(id);
}
@RequestMapping(value = "/email/{userEmail}", method = RequestMethod.GET)
public User getUserByUserEmail(@PathVariable ("userEmail") String userEmail){
return userService.getUserByEmail(userEmail);
}
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
public String deleteUserById(@PathVariable("id") long id){
userService.removeUserById(id);
return "User has been deleted Successfully";
}
@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
public String updateCoordinatorById(@RequestBody User user, @PathVariable("id") long id){
String pwd = user.getUserPassword();
String encryptPwd = passwordEncoder.encode(pwd);
user.setUserPassword(encryptPwd);
userService.updateUser(user,id);
return "User has been updated Successfully";
}
@RequestMapping(method = RequestMethod.POST)
public String insertCoordinator(@RequestBody User user){
String pwd = user.getUserPassword();
String encryptPwd = passwordEncoder.encode(pwd);
user.setUserPassword(encryptPwd);
userService.insertUser(user);
return "User added Successfully";
}
}
CustomerUserDetailsService. java
@Service
public class CustomUserDetailService implements UserDetailsService {
private UserDao userDao;
public CustomUserDetailService(UserDao userDao){
this.userDao = userDao;
}
@Override
public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
User user = this.userDao.findUserByUserEmail(email);
CustomUserDetail userDetail =null;
if(user !=null){
userDetail= new CustomUserDetail();
userDetail.setUser(user);
}else{
throw new UsernameNotFoundException("user not exist with email: " +email);
}
return userDetail;
}
}
CustomUserDetail. java
@Data
public class CustomUserDetail implements UserDetails {
private User user;
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return user.getRoles().stream().map(r -> new
SimpleGrantedAuthority("ROLE_"+r)).collect(Collectors.toList());
}
@Override
public String getPassword() {
return user.getUserPassword();
}
@Override
public String getUsername() {
return user.getUserEmail();
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return this.user.getUserIsActive() == 1;
}
}
Пользователь. java
@Data
@Entity
public class User{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(nullable = false)
private int userId;
@Column(nullable = false)
private String userSurname;
@Column(nullable = false)
private String userOtherName;
@Column(nullable = false)
private String userEmail;
private String userPassword;
private int userIsActive;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles;
public String getUserPassword(){
return getUserSurname();
}
}
UserService. java
@Service
public class UserService {
@Autowired
private UserDao userDao;
public Collection<User> getAllUser(){
return userDao.findAll();
}
public User getUserById(long id){
return userDao.findById(id).get();
}
public void removeUserById(long id){
userDao.deleteById(id);
}
public User updateUser(User user,long id){
return userDao.findById(id).map(user1 -> {
user1.setUserSurname(user.getUserSurname());
user1.setUserOtherName(user.getUserOtherName());
user1.setUserEmail(user.getUserEmail());
user1.setUserPassword(user.getUserPassword());
user1.setId(user.getId());
user1.setUserId(user.getUserId());
user1.setRoles(user.getRoles());
return userDao.save(user1);
}).orElseGet(() -> {
user.setId(id);
return userDao.save(user);
});
}
public void insertUser(User user) {
userDao.save(user);
}
public User getUserByEmail(String email){
return userDao.findUserByUserEmail(email);
}
}