有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java无法从另一个普通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应用程序中


共 (1) 个答案

  1. # 1 楼答案

    似乎您没有在servlet中获得您认为在筛选器中创建的会话。在过滤器中使用req。getSession(),它始终在创建新会话。在servlet中,您正在发出请求。getSession(false),如果不存在会话,容器应该返回null,或者返回现有会话。您使用的是哪个servlet容器?如果您使用的是IDE,能否设置一个调试点并比较会话ID以确认它们是相同的?另外,您的用户数据是否可序列化