use of com.haulmont.cuba.security.auth.SystemUserCredentials in project cuba by cuba-platform.
the class SystemAuthenticationProvider method authenticate.
@Override
public AuthenticationDetails authenticate(Credentials credentials) throws LoginException {
SystemUserCredentials systemLogin = (SystemUserCredentials) credentials;
String login = systemLogin.getLogin();
Locale credentialsLocale = systemLogin.getLocale() == null ? messages.getTools().getDefaultLocale() : systemLogin.getLocale();
User user = loadUser(login);
if (user == null) {
throw new LoginException(getInvalidCredentialsMessage(login, credentialsLocale));
}
Locale userLocale = getUserLocale(systemLogin, user);
UserSession session = userSessionManager.createSession(user, userLocale, true);
return new SimpleAuthenticationDetails(session);
}
use of com.haulmont.cuba.security.auth.SystemUserCredentials in project cuba by cuba-platform.
the class RunnerBean method setSecurityContext.
protected void setSecurityContext(ScheduledTask task, @Nullable UserSession userSession) throws LoginException {
if (userSession == null) {
UUID sessionId = userSessionIds.get(task.getUserName());
userSession = sessionId == null ? null : userSessions.getAndRefresh(sessionId);
if (userSession == null) {
userSession = authenticationManager.login(new SystemUserCredentials(task.getUserName())).getSession();
userSessionIds.put(task.getUserName(), userSession.getId());
}
}
AppContext.setSecurityContext(new SecurityContext(userSession));
}
use of com.haulmont.cuba.security.auth.SystemUserCredentials in project cuba by cuba-platform.
the class Authentication method begin.
/**
* Begin an authenticated code block.
* <br>
* If a valid current thread session exists, does nothing.
* Otherwise sets the current thread session, logging in if necessary.
* <br>
* Subsequent {@link #end()} method must be called in "finally" section.
*
* @param login user login. If null, a value of {@code cuba.jmxUserLogin} app property is used.
* @return new or cached instance of system user session
*/
public UserSession begin(@Nullable String login) {
if (cleanupCounter.get() == null) {
cleanupCounter.set(0);
}
// check if a current thread session exists, that is we got here from authenticated code
SecurityContext securityContext = AppContext.getSecurityContext();
if (securityContext != null) {
UserSession userSession = userSessions.getAndRefresh(securityContext.getSessionId());
if (userSession != null) {
log.trace("Already authenticated, do nothing");
cleanupCounter.set(cleanupCounter.get() + 1);
if (log.isTraceEnabled()) {
log.trace("New cleanup counter value: {}", cleanupCounter.get());
}
return userSession;
}
}
// no current thread session or it is expired - need to authenticate
if (StringUtils.isBlank(login)) {
login = getSystemLogin();
}
UserSession session = null;
log.trace("Authenticating as {}", login);
UUID sessionId = sessions.get(login);
if (sessionId != null) {
session = userSessions.getAndRefresh(sessionId);
}
if (session == null) {
// saved session doesn't exist or is expired
synchronized (this) {
// double check to prevent the same log in by subsequent threads
sessionId = sessions.get(login);
if (sessionId != null) {
session = userSessions.get(sessionId);
}
if (session == null) {
try {
session = authenticationManager.login(new SystemUserCredentials(login)).getSession();
session.setClientInfo("System authentication");
} catch (LoginException e) {
throw new RuntimeException("Unable to perform system login", e);
}
sessions.put(login, session.getId());
}
}
}
AppContext.setSecurityContext(new SecurityContext(session));
return session;
}
Aggregations