【发布时间】:2014-08-24 12:43:48
【问题描述】:
我有两个网络应用程序。应用 A 需要调用应用 B 的 REST 服务。 我想为应用程序 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值存储在用户会话中,然后应用程序A在需要时使用存储的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,但它不起作用。
我错过了什么?
【问题讨论】:
-
那里的会话是否为空?
-
是的,它是 null 并返回 UNAUTHORIZED
标签: java session tomcat cookies servlet-filters