首頁 > 軟體

SpringBoot中HttpSessionListener的簡單使用方式

2022-03-17 13:00:32

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你好";
    }
}

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com