外部ELB AWS的Cookie问题

时间:2017-08-11 18:00:29

标签: apache amazon-web-services tomcat cookies amazon-elb

我们的系统中有一个Apache Web服务器,它将所有请求代理转发到内部ELB,然后代理运行不同应用程序的Tomcats。其中一个应用程序设置了一个cookie,用于了解用户是否有会话。使用内部平衡器可以很好地工作。对于某些架构问题,我们必须将其中一个平衡器从内部平衡器更改为外部平衡器。问题是,当我们想要从运行在apache中的php代码访问外部平衡器后面运行的应用程序时,cookie不会通过,外部ELB会更改所有这些。外部ELB有自己的子域。 以下是我们设置cookie的代码java:

public int validaLogin(HttpSession sesion,
        final HttpServletRequest request,
        final HttpServletResponse response, String usuario,
        int login_user_id) {
    final String sesion_username = (String) sesion
            .getAttribute(Utiles.CONST_USUARIO);
    int codigo = 0;
    if (sesion_username == null || usuario != null
            && !(usuario.equals(sesion_username))) {
        List<String[]> listaimei = new ArrayList<String[]>();
        listaimei.clear();

        sesion.setAttribute(URL, request.getQueryString());

        if (usuario != null) {
            sesion.setAttribute(Utiles.CONST_USUARIO, usuario);
            sesion.setAttribute("User", usuario);
            Enumeration<Locale> locales = request.getLocales();
            if (locales.hasMoreElements()) {
                Locale locale = (Locale) locales.nextElement();
                sesion.setAttribute("Locale", locale);
            }
        }

        if (login_user_id > 0) {
            sesion.setAttribute(Utiles.CONST_IDUSUARIO, login_user_id);
        }

        String login_ip;
        if (request.getHeader("x-forwarded-for") == null) {
            login_ip = request.getHeader("host");
        } else {
            login_ip = request.getHeader("x-forwarded-for");
        }
        sesion.setAttribute("ip", login_ip);
        SqlQuery.setUserInfoInSession(sesion, login_user_id);
        List<Integer> listaPermisos = SqlQuery.setUserPermisosInSession(sesion, login_user_id);

        // Obtiene lista de IMEI visible por el usuario
        objResultGetListaIMEI userIMEI = getlistaimeiFromDatabase(
                login_user_id, login_ip);
        codigo = userIMEI.getResultado();
        sesion.setAttribute(Utiles.CONST_LISTAIMEI, userIMEI.getListaImei());

        // Guarda sesion como Header
        response.setHeader("wpsid", sesion.getId());

        // Guarda sesion como Cookie
        Cookie cookie = new Cookie("wpsid", sesion.getId());
        cookie.setMaxAge(-1);
        cookie.setPath("/");
        response.addCookie(cookie);

        // Agrega nueva sesion al hash 05/03/2014 CV
        WaypointSessionsInit.dsAddNewSession(sesion, userIMEI.getListaImei(), listaPermisos);

    }

    return codigo;
}

0 个答案:

没有答案