saya mengautentikasi pengguna saya dengan UserDetailsService:
<authentication-manager alias="authenticationManager">
<authentication-provider user-service-ref="userDetailsService">
<password-encoder hash="sha"/>
</authentication-provider>
</authentication-manager>
kelas 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;
}
}
EDIT:
setelah mendapatkan nama pengguna saya memeriksa indikator ForceChangePass dan jika itu benar saya melalui pengecualian saya sendiri yang pada gilirannya mengarahkan pengguna ke loginFailureHandler (meskipun kata sandi benar atau tidak) saya ingin di loginFailureHandler untuk memeriksa apakah pengecualian saya dilemparkan jika login berhasil saja .