<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Answers to: Is there something managing user concurrent sessions?</title><link>https://answers.axonivy.com/questions/2272/is-there-something-managing-user-concurrent-sessions</link><description>&lt;p&gt;We need to implement a security enabling a user to be logged only in one session. We will either prevent him to log twice or kill any other session on login. &lt;/p&gt;
&lt;p&gt;Is there already something to support that (aka sessiob listener or session filter). &lt;/p&gt;</description><atom:link href="https://answers.axonivy.com/questions/2272/is-there-something-managing-user-concurrent-sessions" rel="self"></atom:link><language>en</language><lastBuildDate>Thu, 15 Dec 2016 08:46:14 -0500</lastBuildDate><item><title>Comment by Reguel Wermelinger on Reguel Wermelinger's answer</title><link>https://answers.axonivy.com/questions/2272/is-there-something-managing-user-concurrent-sessions#2291</link><description>&lt;p&gt;You could use an automatically started process for the registration. Similar as described here: &lt;a href="http://answers.axonivy.com/questions/1938/how-can-we-use-global-variable-in-automatic-process-element"&gt;http://answers.axonivy.com/questions/1938/how-can-we-use-global-variable-in-automatic-process-element&lt;/a&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Reguel Wermelinger</dc:creator><pubDate>Thu, 15 Dec 2016 08:46:14 -0500</pubDate><guid>https://answers.axonivy.com/questions/2272/is-there-something-managing-user-concurrent-sessions#2291</guid></item><item><title>Comment by RemiMorin on Reguel Wermelinger's answer</title><link>https://answers.axonivy.com/questions/2272/is-there-something-managing-user-concurrent-sessions#2289</link><description>&lt;p&gt;Thanks for answer, I'm going that way, is there a specific place to set this configuration? something getting called at application startup.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">RemiMorin</dc:creator><pubDate>Wed, 14 Dec 2016 21:25:12 -0500</pubDate><guid>https://answers.axonivy.com/questions/2272/is-there-something-managing-user-concurrent-sessions#2289</guid></item><item><title>Answer by Reguel Wermelinger</title><link>https://answers.axonivy.com/questions/2272/is-there-something-managing-user-concurrent-sessions/2286</link><description>&lt;p&gt;You could implement an &lt;code&gt;ch.ivyteam.ivy.security.ISessionExtension&lt;/code&gt; for that. It can be registered on the SecurityManager e.g.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SecurityManager.getSecurityManager().addSessionExtension(ISessionExtension ext)
&lt;/code&gt;&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Reguel Wermelinger</dc:creator><pubDate>Tue, 13 Dec 2016 11:37:55 -0500</pubDate><guid>https://answers.axonivy.com/questions/2272/is-there-something-managing-user-concurrent-sessions/2286</guid></item><item><title>Answer by Flavio Sadeghi</title><link>https://answers.axonivy.com/questions/2272/is-there-something-managing-user-concurrent-sessions/2283</link><description>&lt;p&gt;The following utility methods returns you requested informations, so they could be called on login. Please note, that is makes use of internal APIs.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;package internals;

import java.util.List;
import java.util.concurrent.Callable;
import java.util.stream.Stream;

import org.apache.commons.lang.StringUtils;

import ch.ivyteam.ivy.security.ISecurityManager;
import ch.ivyteam.ivy.security.ISession;
import ch.ivyteam.ivy.security.internal.SecurityManager;


public class SessionUtils {
    public static boolean isUserLoggedInInOtherSessionAsSystem(String userName) {
        return executeAsSystem(() -&amp;gt; isUserLoggedInInOtherSession(userName));
    }

    public static boolean isUserLoggedInInOtherSession(String userName) {
        return getOtherSessionOfUser(userName).findFirst().isPresent();
    }

    public static void logoutUserFromOtherSessionsAsSystem(String userName) {
        executeAsSystem(() -&amp;gt; logoutUserFromOtherSessions(userName));
    }

    public static Void logoutUserFromOtherSessions(String userName) {
        getOtherSessionOfUser(userName).forEach(session -&amp;gt; session.logoutSessionUser());
        return null;
    }

    public static Stream&amp;lt;ISession&amp;gt; getOtherSessionOfUser(String userName)
    {
        if (StringUtils.isBlank(userName)) {
            return Stream.empty();
        }
        ISecurityManager securityManager = SecurityManager.getSecurityManager();
        ISession currentSession = securityManager.getCurrentSession();
        List&amp;lt;ISession&amp;gt; allSessions = securityManager.getSessions();
        return allSessions.stream()
                .filter(session -&amp;gt; session != currentSession)
                .filter(session -&amp;gt; userName.equals(session.getSessionUserName()));
    }

    private static &amp;lt;R&amp;gt; R executeAsSystem(Callable&amp;lt;R&amp;gt; callable)
    {
        try {
            return SecurityManager.getSecurityManager().executeAsSystem(callable);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Flavio Sadeghi</dc:creator><pubDate>Tue, 13 Dec 2016 09:47:46 -0500</pubDate><guid>https://answers.axonivy.com/questions/2272/is-there-something-managing-user-concurrent-sessions/2283</guid></item></channel></rss>