Java通过sessionId获取Session

Servlet2.1之后不支持SessionContext里面getSession(String id)方法。

但是,我们可以通过HttpSessionListener监听器和全局静态map自己实现一个SessionContext。

MySessionContext.java:

public class MySessionContext {
    private static HashMap mymap = new HashMap();

    public static synchronized void AddSession(HttpSession session) {
        if (session != null) {
            mymap.put(session.getId(), session);
        }
    }

    public static synchronized void DelSession(HttpSession session) {
        if (session != null) {
            mymap.remove(session.getId());
        }
    }

    public static synchronized HttpSession getSession(String session_id) {
        if (session_id == null)
        return null;
        return (HttpSession) mymap.get(session_id);
    }
}

MySessionListener.java:

public class MySessionListener implements HttpSessionListener {
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
    MySessionContext.AddSession(httpSessionEvent.getSession());
    }

    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        HttpSession session = httpSessionEvent.getSession();
        MySessionContext.DelSession(session);
    }

}

web.xml添加一个监听器:

<listener>
<listener-class>listener.MySessionListener</listener-class>
</listener>

根据sessionId获取Session对象:

String sessionId = request.getParameter("sessionId");

HttpSession session = MySessionContext.getSession(sessionId);
时间: 2024-08-30 17:03:12

Java通过sessionId获取Session的相关文章

Java根据sessionId获取Session对象

1. 建立一个自己的SessionContext: package cn.org.jshuwei.session.core; import javax.servlet.http.HttpSession; import java.util.HashMap; public class MySessionContext { private static MySessionContext instance; private HashMap mymap; private MySessionContext(

解决Andriod获取Session里面的值为空

问题描述: 安卓课程设计,用户登陆时做了个验证码的功能,在WEB端可以正常运行. 在安卓跑时发现服务器端可以正确获取前端传来的验证码的值,但是从session里取验证码的值时却一直是null. 经过DEBUG发现两者的SESSIONID值不同了,根本不是一个SESSION对象,也不太清楚是什么原因造成的,如下图所示: 解决办法: 曲线救国,服务器端生成并存储验证码后,也存储SESSIONID的值至cookie中并发送给前台.前台表单传递信息时在将该SESSIONID传递过来,后台通过SESSIO

SpringMVC - controller中获取session

平时使用springMVC 在方法中访问session中经常很自然地调用Servlet API. 用起来非常直观方便,一直没有多考虑什么. 比如这样: @RequestMapping(value = "/logout") public String logout(HttpSession session) { session.removeAttribute("user"); return "/login"; } 但毕竟这样对Servlet API产

SQLServer中使用扩展事件获取Session级别的等待信息以及SQLServer 2016中Session级别等待信息的增强

本文出处:http://www.cnblogs.com/wy123/p/6835939.html 什么是等待 简单说明一下什么是等待:当应用程序对SQL Server发起一个Session请求的时候,这个Session请求在数据库中执行的过程中会申请其所需要的资源,比如可能会申请内存资源,表上的锁资源,物理IO资源,网络资源等等,如果当前Session运行过程中需要申请的某些资源无法立即得到满足,就会产生等待.SQL Server会以不用的方式来展现这个等待信息,比活动Session的等待信息,

用struts2获取session、request、parmeter的方法

package com.hanqi.action; import java.util.Map; import com.opensymphony.xwork2.ActionContext; public class TestAction { //解耦方式 //封装了WEB资源 //使用ActionContext @SuppressWarnings("unchecked") public String testweb() { //访问web资源 System.out.println(&qu

org.apache.shiro.session.InvalidSessionException: java.lang.IllegalStateException: getAttribute: Session already invalidated] with root cause

1.遇到以下异常,找了好长时间,终于解决,报的异常如下: 七月 07, 2017 3:02:16 下午 org.apache.catalina.core.StandardWrapperValve invoke严重: Servlet.service() for servlet [SpringMVC] in context with path [/IMP] threw exception [org.apache.shiro.session.InvalidSessionException: java.

JAVA–利用Filter和session防止页面重复提交

JAVA–利用Filter和session防止页面重复提交解决思路:1 用户访问表单页面,先经过过滤器,过滤器设置一个随机id作为token令牌, 并将该token放入表单隐藏域中.2 表单响应到浏览器,用户填充数据后提交请求;3 请求经过过滤器,过滤器获取表单中的令牌进行验证,如果和之前生成的令牌一致,则将请求放行,并且清空令牌;4 如果用户重复提交表单,请求经过过滤器,过滤器进行验证.因为第一次放行后令牌已经清空失效,令牌不一致,不放行.跳转到提醒界面. 需用知识:1 过滤器基础知识2 se

Python3+Selenium获取session和token供Requests使用教程

一.背景说明 之前写了一款简单的api模糊测试工具,之前系统可以使用http Base认证现在改成session形式并加上了token. 最简单的改造方法,是自己先在浏览器手动登录,然后提取出session和token(系统token在整个会话期间可重复使用)填到模糊测试工具中即可.但这种非全自动化的方式不到万不得已不想用. 最直接的方法,最使用requests按登录流程依次发包登录即可.但其中的难点是密码是加密提交的,询问开发人员说是DES加密:DES加密不难,但是用不同的语言编写的加密算法与

JTI + JNI,为Java程序提供获取JVM内部信息的通道

首先,JTI是啥? HotSpot JVM是使用C++写的,在操作系统层面来看,java.exe进程与其他进程并无特别之处.任何一个进程都可以加载第三方的DLL,JTI就是java.exe开放出来的向Java.exe进程注入dll的接口.也就是说,开发者根据JTI定义好的规范,用C++写一个dll,这个dll就可以被java.exe进程加载了[启动jvm的时候要加上-agentlib参数]. JTI的详细资料参见以下网址:http://docs.oracle.com/javase/7/docs/