【发布时间】:2019-11-01 06:35:48
【问题描述】:
所以我有应用程序,用户可以通过社交网络或正常登录登录。 我希望能够登录管理员帐户并禁止用户,当我将用户状态更改为禁止时,我想通过代码将他注销!我该如何实现?
我添加了会话监听器
@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());
}
}
}
调试时 - 我不知道如何识别用户,而且会话似乎是在用户登录之前创建的,只是通过访问站点,似乎不是正确的方法。
【问题讨论】:
-
这取决于您使用的身份验证方法。如果您直接使用会话,则可以在用户登录时跟踪会话——此时您也应该能够识别用户。如果您使用一些基于令牌的机制,例如 OAuth,您可以在身份提供者中锁定/禁止用户,并使用非常短暂的身份验证令牌(例如 5 分钟)。这样用户应该在短时间内退出,因为刷新令牌会失败。
-
@aksappy 它是如何重复的? 2 个不同的问题....
-
@Thomas 我同时使用 OAuth 和 basic ,在 basic 中,我的意思是默认情况下来自 spring security 的用户名密码身份验证。不知道它是如何在幕后工作的,我的印象是它使用会话来识别登录用户。 Bud 在我看来,当我调试添加新会话的断点时,它是在登录之前触发的,而不是在登录期间触发的。
-
嗯,在许多应用程序中,您会在第一次请求时立即获得会话,即在登录之前。但是,出于安全原因,您应该在登录后获得一个新会话,例如以防止会话固定攻击等 - 您仍然必须跟踪哪些会话属于哪个登录用户。
标签: java spring security httpsession