无法从另一个普通的 Http Servlet 访问过滤器 Servlet 的会话属性



我这里有一个问题:

在我使用过滤器 servlet 设置会话属性后,我尝试在另一个普通的 http servlet 中检索会话属性,但它看起来 getAttribute('system.userinfo') 无法检索任何内容。 这是怎么回事?谢谢!

public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain) throws IOException, ServletException {
    HttpServletRequest httpReq = (HttpServletRequest) request;
    HttpServletResponse httpResp = (HttpServletResponse) response;
    HttpSession session = httpReq.getSession();
    httpReq.setCharacterEncoding("UTF-8");
    UserDTO dto = new UserDTO();
    session.setAttribute("system.userinfo", dto);
    chain.doFilter(request, response);
}

public class FileUpload extends HttpServlet {
    @SuppressWarnings("unchecked")
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html");
        response.setCharacterEncoding("UTF-8");
        // cannot get anything here
        UserDTO userinfo = (UserDTO)request.getSession(false).getAttribute("system.userinfo");

        }
}

两个 Servlet 都在同一个 Web 应用程序中。

似乎您没有在 servlet 中获取您认为是在过滤器中创建的会话。在过滤器中,您正在使用 req.getSession(),它总是创建一个新会话。在你给出request.getSession(false)的servlet中,如果不存在会话,容器应该返回null或返回现有会话。您使用的是哪种 servlet 容器?如果您使用的是 IDE,是否可以放置一个调试点并比较会话 ID 以确认它们是否相同?另外,您的用户DTO是否可序列化?

最新更新