我爱编程程序员JVM虚拟机&字节码底层术篇幅&JAVA进阶

微服务session落坑记

2018-06-17  本文已影响711人  68号小喇叭
请求处理过程缩略图.jpg

本文适用于对session、cookie有一定了解的同学,主要以问题定位过程为线索,简单讲述tomcat session生成机制、oauth2认证过程以及spring方法参数映射处理等内容

背景知识

protected Session doGetSession(boolean create) {
// 略去部分代码
 (requestedSessionId != null) {
        session = manager.findSession(requestedSessionId);
        // 略去部分代码
        String sessionId = getRequestedSessionId();
        // 略去部分代码
        session = manager.createSession(sessionId);

        // 创建cookie并写入response
        if (session != null
                && context.getServletContext()
                        .getEffectiveSessionTrackingModes()
                        .contains(SessionTrackingMode.COOKIE)) {
            Cookie cookie =
                ApplicationSessionCookieConfig.createSessionCookie(
                        context, session.getIdInternal(), isSecure());

            response.addSessionCookieInternal(cookie);
        }
        // 略去部分代码
    }

前人挖坑后人落,都是框架惹的祸

问题特征

问题定位过程:

public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
        Class<?> paramType = parameter.getParameterType();
        // 略去部分代码
        if (HttpSession.class.isAssignableFrom(paramType)) {
            HttpSession session = request.getSession();
        // 略去部分代码
        }
}

解决方案

上一篇下一篇

猜你喜欢

热点阅读