所以我有一个应用程序,用户可以通过社交网络或普通登录名登录。 我希望能够登录到管理员帐户并禁止用户,当我将用户的状态更改为“禁止”时,我想通过代码将其注销!我该如何实现?
我添加了会话监听器
@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());
}
}
}
调试时-我不知道如何识别用户,而且会话似乎是在用户登录后才创建的,实际上只是通过访问网站而已,这似乎不是正确的方法。< / p>
答案 0 :(得分:4)
创建类似
的元用户信息模型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);
创建会话时将触发上述会话监听器
您可以通过在SessionListener中设置getAllSessionList()来获取所有会话列表
public List<HttpSession> getAllSessionList(){
return this.sessionList;
}
假设您要禁止会话并使用户无效,那么在实现业务逻辑时要获取特定的会话并 使用
使其无效session.invalidate();
还试图找到用户的JSESSIONID id并将其添加到meta上下文类成员中,您还可能需要使它无效
这可以帮助您获得所需的解决方案
答案 1 :(得分:0)
您还可以使用Servlet过滤器过滤所有请求,并查看用户是否处于活动状态。让我知道您是否需要示例。