我使用其他用户帐户登录,但是我具有包含创建的http会话ID的哈希图,并且我需要使用sessionid
来使http会话无效。
有没有办法做到这一点?
答案 0 :(得分:0)
没有标准的方法可以删除仅知道会话ID的会话。
也许您可以通过发送伪造的会话ID(如cookie或http-参数)来欺骗服务器,以接管另一个人的会话,并尝试使用某些应用程序的方法(例如“注销”)使其无效。
但是tomcat中没有JSP或其他东西可以做到这一点。
如果要使在该服务器上部署的应用程序中的会话无效,您可能会对How can i load Java HttpSession from JSESSIONID?
感兴趣答案 1 :(得分:0)
有两种解决方案。 解决方案1: 在这里描述 How can i load Java HttpSession from JSESSIONID? 这里的问题是我们需要存储在Map中创建的所有会话。这里存在安全风险。
解决方案2: 实施注销API 这样的事情。
@RequestMapping(value = "/logout", method = RequestMethod.GET)
public ResponseEntity<Resource> logout(HttpServletRequest request, HttpServletResponse response) {
HttpSession session = request.getSession(false);
LOG.info("Clean session: sessionId: [{}]", session == null ? "null" : session.getId());
if (session != null) {
session.invalidate();
}
return new ResponseEntity<>(new Resource<String>(), HttpStatus.OK);
}
调用此API时,在标头中添加以下cookie,假设您的会话为49A77C2ED71E3240FC2CC5DBD20C7CCE,然后请求将是这样的
curl --location --request PUT 'https://your.server.com/<somepath>/logout' \
--header 'Authorization: Some authToken if required' \
--header 'cookie: JSESSIONID=49A77C2ED71E3240FC2CC5DBD20C7CCE; Path=/<somepath>; Secure; HttpOnly'
答案 2 :(得分:-1)
您可以在给定的方法下使用
session.invalidate();
或者您可以从会话中删除所有属性并使其无效
Enumeration<String> attributes = request.getSession().getAttributeNames();
while (attributes.hasMoreElements()) {
String attribute = attributes.nextElement();
session.removeAttribute(attribute);
}
session.invalidate();