Встроенный метод сопоставления Spring-Boot BCrypt не работаетJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Встроенный метод сопоставления Spring-Boot BCrypt не работает

Сообщение Anonymous »

У меня есть UserController, который получает UserDTO и создает/обновляет пользователя в БД. Проблема, с которой я сталкиваюсь, заключается в том, что у меня также есть логин, и когда я вставляю имя пользователя и пароль в форму входа, я всегда получаю «Неправильный пароль». исключение, несмотря на то, что учетные данные были вставлены правильно.

Одно я подозреваю, что виноват BCrypt, поскольку из-за того, что он генерирует случайную соль при кодировании, возможно, просто возможно, зашифрованный текст заканчивается быть другим и все такое, что странно, поскольку я предполагаю, что это должно сработать. Я хочу знать, как я могу решить эту проблему, связанную с разным хешированием и невозможностью проверить учетные данные пользователя.
Я пробовал, например, закодировать полученный пароль и использовать метод совпадений через мой автоматически подключенный парольEncoder, и я использую свой собственный authProvider.
Вот код, дайте мне знать, если вам понадобится что-нибудь еще.
CustomAuthProvider.java

Код: Выделить всё

@Service
public class CustomAuthProvider implements AuthenticationProvider {

private final UserServiceImpl userServiceImpl;
private final BCryptPasswordEncoder passwordEncoder;

@Autowired
public CustomAuthProvider(UserServiceImpl userServiceImpl, BCryptPasswordEncoder passwordEncoder) {
this.userServiceImpl = userServiceImpl;
this.passwordEncoder = passwordEncoder;
}

@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
String username = authentication.getName();
String password = authentication.getCredentials().toString();
UserDetails userDetails = userServiceImpl.loadUserByUsername(username);

if (!passwordEncoder.matches(password, userDetails.getPassword())) { //The problem is here evidently.
throw new BadCredentialsException("Wrong password.");
}

return new UsernamePasswordAuthenticationToken(userDetails, password, userDetails.getAuthorities());
}

@Override
public boolean supports(Class authentication) {
return authentication.equals(UsernamePasswordAuthenticationToken.class);
}
}
Кроме того, вот метод loadUserByUsername:
UserServiceImpl.java

Код: Выделить всё

@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
UserDTO user = this.getUserByUsername(username);
User anUser = convertToUser(user);
ModelMapper modelMapper = new ModelMapper();
return modelMapper.map(anUser,UserPrincipal.class);
}
}
А вот метод сохранения, который я использую для сохранения и обновления пользователей, а также LoginController;

Код: Выделить всё

@Override

public void save(UserDTO user) {

User aUser = this.convertToUser(user);

aUser.setPassword(passwordEncoder.encode(aUser.getPassword()));

this.userRepository.save(aUser); }
LoginController.java:

Код: Выделить всё

@RestController
public class LoginController{

private final CustomAuthProvider providerManager;

@Autowired
public LoginController(CustomAuthProvider providerManager) {
this.providerManager = providerManager;
}

@GetMapping("/login")
public String login() {
return "login";
}

@PostMapping("/login")
public String login(@RequestParam("username") @NotBlank String username,
@RequestParam("password") @NotBlank String password, Model model) {
if(username == null || password == null) { //This is probably not necessary
model.addAttribute("error", "Invalid credentials");
return "login";
}
try {
Authentication auth = providerManager.authenticate(
new UsernamePasswordAuthenticationToken(username, password)
);
SecurityContextHolder.getContext().setAuthentication(auth);
return "redirect:/notes";
} catch (AuthenticationException e) {
model.addAttribute("error", "Invalid credentials");
return "login";
}
}

}
UserPrincipal.java

Код: Выделить всё

@Data
public class UserPrincipal implements Serializable , UserDetails {
int id;
private String username;
private String password;
private Date accountCreationDate = new Date();

@Override
public Collection

Подробнее здесь: [url]https://stackoverflow.com/questions/75153947/built-in-spring-boot-bcrypt-matches-method-doesnt-work[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Spring Boot Security – закодированный пароль не похож на метод BCrypt/Ecommence.
    Anonymous » » в форуме JAVA
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Spring boot Пароль Bcrypt в application.properties
    Anonymous » » в форуме JAVA
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Spring boot Пароль Bcrypt в application.properties
    Anonymous » » в форуме JAVA
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • BCrypt в моем проекте Spring Security (Spring Security)
    Anonymous » » в форуме JAVA
    0 Ответы
    50 Просмотры
    Последнее сообщение Anonymous
  • Миграция с Spring (Vanilla) на Spring Boot – как сохранить URL-адреса после пользовательского сопоставления сервлетов?
    Anonymous » » в форуме JAVA
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»