SpringBoot中HttpSessionListener的简单使用方式
目录
- HttpSessionListener的使用方式
 - session监听实现类
 - controller调用
 - 注册HttpSessionListener失效原因
 - 问题描述
 - 原因
 
HttpSessionListener的使用方式
session监听实现类
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
@Component
public class MySessionListener implements HttpSessionListener {
    @Override
    public void sessionCreated(HttpSessionEvent se) {
        //设置session持续时间,单位为秒
        se.getSession().setMaxInactiveInterval(10);
        System.out.println("-----------Session已创建------------------");
    }
    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        String name = (String)se.getSession().getAttribute("name");
        System.out.println("name= "+ name);
        System.out.println("-----------Session已销毁------------------");
    }
}
controller调用
    @RequestMapping("/sessionTest")
    @ResponseBody
    public void sessionTest(HttpServletRequest request){
        request.getSession().setAttribute("name","zwq");
        //销毁session
        request.getSession().invalidate();
    }
注意点:
1、request.getSession(),获取即创建session,会触发session监听实现类中的sessionCreated方法;
2、session过了有效时间或主动使用invalidate方法销毁,会触发session监听实现类中的sessionDestroyed方法;
3、使用监听器一定要确保可以被springboot扫描到并打包成bean,一般来说在监听器实现类前加 @Component注解并保证该类在程序扫描范围内即可。
注册HttpSessionListener失效原因
问题描述
监听器:
@WebListener
public class MyHttpSessionListener implements HttpSessionListener {
    /**
     * session创建
     */
    @Override
    public void sessionCreated(HttpSessionEvent e) {
        HttpSession session=e.getSession();
        System.out.println("session创建===ID===="+session.getId());
    }
    /**
     * session销毁
     */
    @Override
    public void sessionDestroyed(HttpSessionEvent e) {
        HttpSession session=e.getSession();
        System.out.println("销毁的sessionID===="+session.getId());
    }
}
启动类上已经加了注解@ServletComponentScan
访问接口:
@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String handle01(){
        return "nihao你好";
    }
}
这样写之后,发现第一次访问时,控制台并不会打印:
System.out.println("session创建===ID===="+session.getId());
原因
在访问接口时,形参要带上HttpSession session.
如下:
@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String handle01(HttpSession session){
        return "nihao你好";
    }
}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。
 赞 (0)
                        