zoukankan      html  css  js  c++  java
  • Spring Boot 使用session监听器

    session存在服务端,session监听器可以用来跟踪session的生命周期。spring-boot项目越来越流行,我就记录下spring boot项目中使用session监听器的过程,以便以后参考。

    spring boot使用监听器非常方便,使用这2个注解就可自动加载注册了:@WebListener和@ServletComponentScan 

    为了加深理解,使用在线百度翻译了下:当使用嵌入式容器时,可以通过使用@ServletComponentScan启用@WebServlet、@WebFilter和@WebListener注释的类的自动注册。

    关键在于:在启动类上使用@ServletComponentScan,就可以自动扫描使用@WebServlet、@WebFilter和@WebListener注解的类完成自动注册。

    1.编写session监听器类实现HttpSessionListener接口,并加上@WebListener注解,声明此类是一个监听器。

    package com.listener;
    
    import javax.servlet.annotation.WebListener;
    import javax.servlet.http.HttpSessionEvent;
    import javax.servlet.http.HttpSessionListener;
    
    /**
     * session监听器
     * @author Administrator
     */
    @WebListener
    public class SessionListener implements HttpSessionListener{
    
        private int onlineCount = 0;//记录session的数量
        
        /**
         * session创建后执行
         */
        @Override
        public void sessionCreated(HttpSessionEvent se) {
            onlineCount++;
            System.out.println("【HttpSessionListener监听器】 sessionCreated, onlineCount:" + onlineCount);
            se.getSession().getServletContext().setAttribute("onlineCount", onlineCount);
        }
    
        /**
         * session失效后执行
         */
        @Override
        public void sessionDestroyed(HttpSessionEvent se) {
            if (onlineCount > 0) {
                onlineCount--;
            }
            System.out.println("【HttpSessionListener监听器】 sessionDestroyed, onlineCount:" + onlineCount);
            se.getSession().getServletContext().setAttribute("onlineCount", onlineCount);
        }
    
    }

    2.启动类上使用@ServletComponentScan,自动扫描带有(@WebServlet, @WebFilter, and @WebListener)注解的类,完成注册。

    package com;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
    import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
    import org.springframework.boot.web.servlet.ServletComponentScan;
    
    
    @SpringBootApplication(exclude={DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class})//无数据库运行
    @ServletComponentScan //scans from the package of the annotated class (@WebServlet, @WebFilter, and @WebListener) 
    public class WebApp{
         public static void main(String[] args) {
             System.out.println(" springApplication run !");
             SpringApplication.run(WebApp.class,args);
        }
         
    }

    只用简单的2个注解就完成了session监听器的注册。这样就能监听到容器session的生命周期了。

    注意:HttpServletRequest的getSession()方法,如果当前请求没有对应的session会自动创建session。

     

    使用getSession(false)就不会创建session,如果没有当前请求对应的session就返回null.

     

    好记性不如烂笔头,提升自己:http://www.urlort.cn/1DjfQb github地址:https://github.com/997480972
  • 相关阅读:
    Delphi泛型系列(很不错)[转静候良机]
    数组的排序
    数据存储到流几种形式(数据流 TStream)
    [转]Delphi TStream详解
    Delphi匿名方法[转 静候良机]
    神一样的崇拜这个女人...打破了我对我们苦b程序员极限的了解
    sql server cte语法
    GdiPlus[49]: 图像(一) 概览
    GdiPlus[51]: 图像(三) 关于呈现
    GdiPlus[47]: IGPMatrix 矩阵(二)
  • 原文地址:https://www.cnblogs.com/liuyong1993/p/10012808.html
Copyright © 2011-2022 走看看