Я хочу ограничить количество одновременных сессий до 1 на пользователя.Если пользователь входит в систему со второго клиента / IP-адреса, я хотел бы сделать недействительным его предыдущий сеанс (если он есть) и создать новый сеанс для текущего клиента.Поэтому пользователю следует запретить доступ и перенаправить, если он сделает еще один запрос от 1-го клиента.
Я использую Shiro в моем загрузочном приложении Spring.Это чистый API-сервер, а не веб-приложение.Передний и внутренний интерфейсы разделены.
Кажется, что у Широ нет поддержки предела сеанса из коробки.
Мне интересно, где я должен выполнять операции?
В настоящее время у меня есть своя собственная
public class AuthRealm extends AuthorizingRealm {
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
// Get user from db and return authentication info
}
}
Интересно, это чистое место для добавления соответствующей логики?Или мне следует выполнить предыдущую сессию после входа в систему и создания сессии 2-го клиента?
Я думаю, что было бы более разумно сделать это в
public class AuthRealm extends AuthorizingRealm {
@Override
protected void assertCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) throws AuthenticationException {
// Credentials verified
// Invalidate previous session
Subject subject = SecurityUtils.getSubject();
Session existingSession = subject.getSession(false);
if (existingSession != null) {
SecurityUtils.getSecurityManager().logout(subject);
existingSession.stop();
}
}
}
Но оказывается, что Широ создаетновая тема с новым сеансом, привязанным к нему, для входа в систему, а не для пользователя.Таким образом, subject = SecurityUtils.getSubject()
всегда будет совершенно новым, и невозможно получить того же пользователя, а затем получить его сеанс.Есть идеи?