【发布时间】:2013-07-10 14:44:56
【问题描述】:
- 客户端设备清除所有 cookie(因此,客户端上不存在
JSESSIONIDcookie)。 - 客户端向 Spring 控制器发出请求。
- Spring Interceptor 拦截请求。
在 Spring 拦截器的 preHandle() 方法的第一行,我记录了 request.getRequestedSessionId() 的值,并且日志显示了这个值,这应该意味着实际上收到了 JSESSIONID从客户端。但是,我的 Fiddler 日志显示请求中没有发送 JSESSIONID。
此外,request.getSession(false).getId() 返回相同的JSESSIONID。
那么,在到达拦截器之前如何/何时/为什么创建会话和JSESSIONID?如果客户端没有发送JSESSIONID cookie,我希望request.getRequestedSessionId() 为空。
我如何防止像这样“即时”创建会话?
如果重要的话,被请求的资源是这样实现的:
@Controller
public class LoginController {
.
.
.
@RequestMapping(value = { "/controller/index.do" })
public final ModelAndView login(final HttpServletRequest request, final HttpServletResponse response) {
.
.
.
编辑 - 正如this answer 中提到的,如果还没有会话,我不理解每次调用 JSP 页面都会隐式创建新会话。但这会在到达拦截器之前发生吗?
EDIT2 -拦截器是org.springframework.web.servlet.handler.HandlerInterceptorAdapter的实例
【问题讨论】:
-
你在客户端使用 JSP 吗?
-
@happybuddha 好点,请看我的编辑。
-
您想添加有关正在使用的拦截器的详细信息吗?
-
尝试使用 servlet filter 而不是 Spring
interceptor。会话由 Java EE 容器在拦截器之前建立。 -
@happybuddha 拦截器是
org.springframework.web.servlet.handler.HandlerInterceptorAdapter的实例
标签: java spring session jakarta-ee interceptor