gpt4 book ai didi

java - 用于管理 session 的 Tomcat 过滤器

转载 作者:行者123 更新时间:2023-11-28 23:36:00 24 4
gpt4 key购买 nike

我有两个网络应用程序。应用A需要调用应用B的rest服务。我想为应用程序 B 的其余服务增加一些安全性,所以我提出了这个工作流程:

当用户在应用程序 A 上进行身份验证时,它还会在应用程序 B 上使用返回 cookie 的 servlet 对应用程序 B 执行身份验证。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 值存储在用户 session 中,然后在需要时应用程序 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);

将返回之前创建的 session ,因为它是在身份验证中创建 session 的 tomcat,但它不工作。

我错过了什么?

最佳答案

抱歉,这里的错误很明显:

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

现在变成了:

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

而且效果很好。

关于java - 用于管理 session 的 Tomcat 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24552906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com