Mam standardową, prostą klasę do logowania w Springu. Sprawdzam przy logowaniu czy user ma wartość Active ustawioną na true, jeżeli nie to wywalam UserNotActivatedException
. I w kontrolerze chciałbym przechwycić ten wyjątek, żeby wyświetlić własną stronę informującą, że konto nie jest aktywne. W rzeczywistości jednak, wyjątek jest generowany, ale metoda z @ExceptionHandler nie jest wywoływana i jedyne co się dzieje, to strona do logowania się odświeża. Dlaczego wyjątek nie jest przechwytywany w kontrolerze ?
@Service
public class UserServiceImpl implements UserService {
@Override
public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
User user = userRepository.findByEmail(email).get();
return createUser(user);
}
private org.springframework.security.core.userdetails.User createUser(User user) {
if(!user.isActive()) {
throw new UserNotActivatedException(":<");
}
//dalszy kod
}
}
@Controller
@Slf4j
public class UserController {
@ExceptionHandler(UserNotActivatedException.class)
public ModelAndView handleNotFoundException(Exception exception) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("strona_z_bledem");
return modelAndView;
}
}