Spring Boot: конфликт метода loadUserByUsername – нужна помощь в решении проблемыJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Spring Boot: конфликт метода loadUserByUsername – нужна помощь в решении проблемы

Сообщение Anonymous »

Я реализую интерфейс UserDetailsService в своем приложении Spring Boot, чтобы использовать собственный метод loadUserByUsername для аутентификации. Однако я столкнулся с проблемами в моей текущей реализации, так как метод не работает должным образом.
Я использую две отдельные службы: CustomUserDetailsService и UserService. Мое требование — иметь две конечные точки POST: /login-admin и /login-user. Когда я делаю запрос POST к /login-admin, я хочу, чтобы для аутентификации использовалась CustomUserDetailsService. Аналогично, когда я делаю POST-запрос к /login-user, я хочу, чтобы для аутентификации использовалась UserService.
В настоящее время моя реализация неправильно различает эти две службы, поскольку метод loadUserByUsername конфликтует.
вот контроллер;

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

@Controller
public class MainController {
@Autowired
@Qualifier("customUserDetailsService")
private CustomUserDetailsService adminService;

@Autowired
@Qualifier("userService")
private UserService userService;

@PostMapping("/login-admin")
public String loginAdmin(@RequestParam("username") String username,
@RequestParam("password") String password,
Model model) {
Admin admin = (Admin) adminService.loadUserByUsername(username);

if (admin == null || !passwordEncoder.matches(password, admin.getPassword())) {
model.addAttribute("error", "username or password is wrong.");
return "login-admin"; // Incorrect login
}

// Successful login
return "redirect:/admin-dashboard";
}

@PostMapping("/login-user")
public String loginUser(@RequestParam("email") String email,
@RequestParam("password") String password,
Model model) {
User user = (User) userService.loadUserByUsername(email);

if (user == null || !passwordEncoder.matches(password, user.getPassword())) {
model.addAttribute("error", "email or passwrod is wrong.");
return "login-user";
}

// Successful login
return "redirect:/user-dashboard"; // Redirect to user dashboard
}

}

вот CustomUserDetailsService;

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

@Service("customUserDetailsService")
public class CustomUserDetailsService implements UserDetailsService {

@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
Admin admin = adminRepository.findByUsername(username);

if (admin == null) {
throw new UsernameNotFoundException(username);
} else {
System.out.println(admin.getUsername());
}

return org.springframework.security.core.userdetails.User.builder()
.username(admin.getUsername())
.password(admin.getPassword())
.roles(admin.getRole())
.build();

}

вот UserService;

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

@Service("userService")
public class UserService implements UserDetailsService {

@Autowired
private UserRepository userRepository;

@Override
public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
User user = userRepository.findByEmail(email);

if (user == null) {
throw new UsernameNotFoundException("User not found with email: " + email);
}

return org.springframework.security.core.userdetails.User.builder()
.username(user.getEmail())
.password(user.getPassword())
.roles(user.getRole())
.build();
}
}

Я попробовал использовать метод @Qualifier, но он не сработал. Я хочу правильно связать «CustomUserDetailsService» с «/login-admin» и «UserService» с «/login-user» без каких-либо конфликтов в методе loadUserByUsername.

Подробнее здесь: https://stackoverflow.com/questions/793 ... ving-issue
Ответить

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

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

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

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

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