Я использую две отдельные службы: 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
}
}
Код: Выделить всё
@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();
}
Код: Выделить всё
@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();
}
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... ving-issue
Мобильная версия