Я аутентифицирую своих пользователей с помощью UserDetailsService:
<authentication-manager alias="authenticationManager">
<authentication-provider user-service-ref="userDetailsService">
<password-encoder hash="sha"/>
</authentication-provider>
</authentication-manager>
userDetailsService класс:
@Service("userDetailsService")
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
private UserService userService;
@Override
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException, DataAccessException {
User user = null;
try {
user = userService.getUserByUsername(username);
} catch (Exception e) {
e.printStackTrace();
}
if (user.isForceChangePass()) {
MyForcePasswordChangeException bad = new MyForcePasswordChangeException(
"Password is not valid, and it must be changed!");
throw bad;
}
}
РЕДАКТИРОВАТЬ:
после получения имени пользователя iпроверить индикатор ForceChangePass и, если это правда, я через свое собственное исключение, которое, в свою очередь, приводит пользователя к loginFailureHandler (несмотря на то, что пароль правильный или нет), я хочу в loginFailureHandler проверить, выбрасывается ли мое исключение только в случае успешного входа в систему.