Как выйти из конкретного пользователя весной? Programatically - PullRequest
1 голос
/ 18 июня 2019

Так что у меня есть приложение, в котором пользователи могут войти через социальные сети или обычный вход. Я хочу иметь возможность войти в учетную запись администратора и заблокировать пользователя. Когда я изменяю статус пользователя на Забаненный, я хочу выйти из него с помощью кода! Как мне этого добиться?

Я добавил слушателя сессии

    @Component
public class SessionListener implements HttpSessionListener {

    private static int totalActiveSessions;
    List<HttpSession> sessionList = new ArrayList<>();

    public static int getTotalActiveSession() {
        return totalActiveSessions;
    }

    @Override
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
        totalActiveSessions++;
        if (sessionList.contains(httpSessionEvent.getSession())) {
            sessionList.add(httpSessionEvent.getSession());
        }
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        totalActiveSessions--;
        if (sessionList.contains(httpSessionEvent.getSession())) {
            sessionList.remove(httpSessionEvent.getSession());
        }
    }
}

Во время отладки - Я не знаю, как идентифицировать пользователя. И, похоже, сеанс создается быстрее, чем фактически пользователь входит в систему, просто посещая сайт, не похоже на правильный способ сделать это.

Ответы [ 2 ]

4 голосов
/ 18 июня 2019

Создание мета-пользовательской информационной модели, например

public class UserInfoContext implements Serializable {

private static final long serialVersionUID = 1L;

private String id;
private String name;
private String authType;

// more fields type of requirements

// Getter and Setters

// Constructor

}

Во время базовой или OAuth-аутентификации поместите метаинформацию в этот объект и добавьте ее в сеанс

UserInfoContext context = new UserInfoContext(id,name,type);

HttpSession session = request.getSession();
session.setAttributes("UserContext",context); 

Вышеупомянутый слушатель сеанса будет запущен при создании сеанса

Вы можете получить весь список сеансов, установив getAllSessionList () в SessionListener

public List<HttpSession> getAllSessionList(){
    return this.sessionList;
}

Предположим, вы хотите запретить сеанс и сделать пользователя недействительным, когда вы реализуете бизнес-логику, получите конкретный сеанс и аннулировать его с помощью

session.invalidate();

Также пытался найти идентификатор JSESSIONID пользователя и добавить его в члены класса мета-контекста, также может потребоваться его аннулирование

Это может помочь вам получить необходимое решение

0 голосов
/ 19 июня 2019

Вы также можете использовать Servlet Filter для фильтрации всех запросов и посмотреть, активен ли пользователь или нет. Дайте мне знать, если вам нужен пример.

...