springboot session创建、销毁、超时、监听详解

KLQ 2020-07-02 11:12:39 java常见问答 8846

下面给大家带来的是和springboot session创建、销毁、超时、监听相关的内容,具体的一起来通过下面的文章来进行了解吧。

1、session创建

@GetMapping( "demo")
public void demo(HttpServletRequest request)
{
    HttpSession sessoin = request.getSession(); //这就是session的创建
    session.setAttribute("username", "TOM"); //给session添加属性属性name: username,属性 value:TOM
    session.setAttribute("password", "tommmm"); //添加属性 name: password; value: tommmm
    System.out.println(session.geiId);
}

HttpSession session=request.getSession(true); //true-假如,这个HTTP请求当中,存在session,则,能够直接通过getSession获取当前的session,假如,当前的请求当中,不存在session,那么,就会自动新建一个session。

HttpSession session=request.getSession(false);//false-只能获取当前请求当中的session,假如,没有也不能自动创建。

2、session获取属性

session.getAttribute("username");
session.getAttribute("password");

3、session,cookies超时设置

(1)在.yml里或者是.xml配置文件里

springboot session创建、销毁、超时、监听

(2)在创建session的时候

session.setMaxInactiveInterval(30 * 60); //以秒为单位,也就是,在没有活动30分钟之后,session将失效

4、session监听

主要的话有3个接口,只要用这2个就够用了。

实现接口HttpSessionListener下的sessionCreated();//当session创建的时候,和sessionDestroyed();//当session被销毁或超时的时候,实现接口HttpSessionAttributeListener下的attributeAdded() //当给session添加属性的时候,attributeRemoved();和attributeReplaced();

下面是一个非常简单的实现在线人数统计的功能。

假如是想要更加深刻的了解session的工作机制,多执行几次session的监听代码,大家可以参考一下下面的代码:

@WebListener
public class SessionListener implements HttpSessionListener, HttpSessionAttributeListener
{
    public static final Logger logger = LoggerFactory.getLogger(SessionListener.class);
    @Override
    public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent)
    {
        logger.info("--attributeAdded--");
        HttpSession session = httpSessionBindingEvent.getSession();
        logger.info("key----:" + httpSessionBindingEvent.getName());
        logger.info("value---:" + httpSessionBindingEvent.getValue());
    }
    @Override
    public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent)
    {
        logger.info("--attributeRemoved--");
    }
    @Override
    public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent)
    {
        logger.info("--attributeReplaced--");
    }
    @Override
    public void sessionCreated(HttpSessionEvent event)
    {
        logger.info("---sessionCreated----");
        HttpSession session = event.getSession();
        ServletContext application = session.getServletContext();
        // 在application范围由一个HashSet集保存所有的session
        HashSet sessions = (HashSet) application.getAttribute("sessions");
        if (sessions == null)
        {
            sessions = new HashSet();
            application.setAttribute("sessions", sessions);
        }
        // 新创建的session均添加到HashSet集中
        sessions.add(session);
        // 可以在别处从application范围中取出sessions集合
        // 然后使用sessions.size()获取当前活动的session数,即为“在线人数”
    }
    @Override
    public void sessionDestroyed(HttpSessionEvent event) throws ClassCastException
    {
        logger.info("---sessionDestroyed----");
        HttpSession session = event.getSession();
        logger.info("deletedSessionId: " + session.getId());
        System.out.println(session.getCreationTime());
        System.out.println(session.getLastAccessedTime());
        ServletContext application = session.getServletContext();
        HashSet sessions = (HashSet) application.getAttribute("sessions");
        // 销毁的session均从HashSet集中移除
        sessions.remove(session);
    }
}

关于springboot session创建、销毁、超时、监听的内容就给你介绍到这里啦!

你想要学习java吗?又或者是在java编程的过程中有遇到过什么难题吗?java项目中常见问题和解决方法,可以通过本站来进行了解哦。

推荐阅读:

springsession跨域详解,实践实例

spring实现session共享,如何进行Session共享?

springsession原理详解,实现原理介绍