我有两个网络应用程序。应用程序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谁在身份验证中创建了会话,但它无法正常工作。
我缺少什么?
答案 0 :(得分:0)
抱歉,错误在这里清晰可见:
cookie.setDomain(request.getContextPath());
cookie.setDomain(request.getServerName());
现在变成了:
cookie.setPath(request.getContextPath());
cookie.setDomain(request.getServerName());
它工作正常。