@Override
public AuthenticationDetails authenticate(Credentials credentials) throws LoginException {
RememberMeCredentials rememberMe = (RememberMeCredentials) credentials;
String login = rememberMe.getLogin();
Locale credentialsLocale = rememberMe.getLocale() == null ?
messages.getTools().getDefaultLocale() : rememberMe.getLocale();
if (Strings.isNullOrEmpty(login)) {
throw new LoginException(getInvalidCredentialsMessage(login, credentialsLocale));
}
checkUserCredentials(credentials);
User user = loadUser(login);
if (user == null) {
throw new LoginException(getInvalidCredentialsMessage(login, credentialsLocale));
}
RememberMeToken loginToken = loadRememberMeToken(user, rememberMe.getRememberMeToken());
if (loginToken == null) {
throw new LoginException(getInvalidCredentialsMessage(login, credentialsLocale));
}
Locale userLocale = getUserLocale(rememberMe, user);
UserSession session = createSession(rememberMe, user, userLocale);
setClientSessionParams(rememberMe, session);
AuthenticationDetails authenticationDetails = new SimpleAuthenticationDetails(session);
checkUserAccess(rememberMe, authenticationDetails);
return authenticationDetails;
}