Tomcat过滤器来管理会话

时间:2014-07-03 11:48:47

标签: java session tomcat cookies servlet-filters

我有两个网络应用程序。应用程序A需要调用应用程序B的休息服务。 我想在应用程序B的休息服务上加上一些安全性,所以我推出了这个工作流程:

当用户在应用程序A上进行身份验证时,它还会对应用程序B执行身份验证,并在B上返回一个返回cookie的servlet。 servlet类似于:

    authenticate(postData): // throw Exceptions

    HttpSession session = request.getSession(true);

    Cookie cookie = new Cookie("JSESSIONID", session.getId());
    cookie.setDomain(request.getContextPath());
    cookie.setDomain(request.getServerName());
    response.addCookie(cookie);

应用程序A将cookie值存储在用户会话中,然后在需要时使用存储的cookie来调用B.

在B上我在我的休息服务前面有一个过滤器,它假设处理检查这些服务是否经过身份验证的请求。

过滤器执行以下操作:

    HttpServletRequest servletRequest = (HttpServletRequest) request;
    HttpSession session = servletRequest.getSession(false);

    if (null == session) {

        LOGGER.error("KO");
        HttpServletResponse servletResponse = (HttpServletResponse) request;
        servletResponse.setStatus(HttpServletResponse.SC_UNAUTHORIZED);

    } else {
        // OK
        chain.doFilter(request, response);
    }

现在,我在期待

request.getSession(false);

将返回先前创建的会话,因为它是tomcat谁在身份验证中创建了会话,但它无法正常工作。

我缺少什么?

1 个答案:

答案 0 :(得分:0)

抱歉,错误在这里清晰可见:

cookie.setDomain(request.getContextPath());
cookie.setDomain(request.getServerName());

现在变成了:

cookie.setPath(request.getContextPath());
cookie.setDomain(request.getServerName());

它工作正常。

相关问题