在Spring启动应用程序中获取当前会话,该应用程序使用MongoDB支持的spring-session

时间:2016-08-22 11:14:57

标签: java spring spring-session

我有HandlerInterceptorAdapter的实例拦截检查区域设置的请求...

public class LocaleControllerInterceptor extends HandlerInterceptorAdapter {   
             @Override
             public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
                   final HttpSession session = SessionContextHolder.getSession();
                   // ...
             } 
}

我的SessionContextHolder是:

public abstract class SessionContextHolder {

        public static HttpSession getSession() {
            ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
            return attr.getRequest().getSession(true);
        }

}

当我想调用端点时,拦截器的preHandle()方法会在第一次调用中调用2次(为什么?!),SessionContextHolder给我的会话(getSession() } method)是org.apache.catalina.session.StandardSessionFacade的实例,第二次是org.springframework.session.data.mongo.MongoExpiringSession的实例。 我已经通过@EnableMongoHttpSession注释启用了MongoHttpSession。 问题是,我希望会话应始终是MongoExpiringSession的实例,但事实并非如此。

任何人都可以解释Spring-Session的机制以及这种行为的原因吗?

0 个答案:

没有答案