我在做一个Spring网玩具项目。
我使用session属性存储随机成员ID,并使用该信息确认是否登录到spring拦截器。
但是,我意识到我在登录过程中存储的信息在重定向到另一个页面后丢失了。
经过几次调试试验后,我发现该属性在拦截器中是活动的,但在posthandle方法完成后丢失了。
真正奇怪的是,当我把查找属性的代码放到拦截器中时,属性并没有消失,所有的函数都能正常工作,但我擦除这些代码后,信息就没有了。
HomeRenderInterceptor.java (预处理、后处理方法)
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
beforeHome(request);
/*==========below is the weird debugging code i mentioned above===========*/
HttpSession session = request.getSession();
Long memberId = (Long) session.getAttribute("memberId");
System.out.println(memberId);
/*========================================================================*/
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
beforeHome(request);
}
这个函数能正常工作是件好事,但是我完全不明白为什么一个调试代码就能决定这个属性是否存在。
如果你知道原因或者对这个问题有不同的看法,我希望得到一个提示,这样我就可以找到它并更多地研究它。
1条答案
按热度按时间8cdiaqws1#
我回答了我自己的问题,我没有弄清楚添加一些调试代码是如何暂时解决我的问题的,但我注意到我的另一个拦截器的excludePathPattern工作不好,所以我只使用addPathPattern,删除调试代码,再次运行我的应用程序,然后它工作得很好。