在 Spring Boot 項目中,HttpSession 是有狀態的,通常只有在用戶發起 HTTP 請求并建立會話后才會創建。因此,在項目啟動時(即應用剛啟動還未處理任何請求)是無法獲取到 HttpSession 的。
方法一:使用 HttpSessionListener(監聽 session 創建)
@Component
public class MySessionListener implements HttpSessionListener {@Overridepublic void sessionCreated(HttpSessionEvent se) {// 當 session 被創建時執行System.out.println("Session created: " + se.getSession().getId());se.getSession().setAttribute("initData", "some value");}@Overridepublic void sessionDestroyed(HttpSessionEvent se) {// 當 session 銷毀時執行}
}
## 方法二:使用攔截器或過濾器設置 Session 數據
@Component
public class SessionInitInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {HttpSession session = request.getSession();if (session.getAttribute("initData") == null) {session.setAttribute("initData", "initialized on first request");}return true;}
}
并在配置中注冊:
@Configuration
public class WebConfig implements WebMvcConfigurer {@Autowiredprivate SessionInitInterceptor sessionInitInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(sessionInitInterceptor);}
}