过滤器未检索request.getAttribute()

时间:2011-02-19 16:22:43

标签: java servlets servlet-filters

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    try { 
        String logged = (String) ((HttpServletRequest) request).getAttribute("loginstatus");
        if(logged != null) {
            out.print("ok");
        } else {
            out.print("not ok");
        }

为什么logged的值始终为null

1 个答案:

答案 0 :(得分:3)

默认情况下,过滤器是在HTTP请求上执行的第一件事。请求属性通常由服务器端代码管理。在此过滤器完成其工作之前,谁/什么应该设置请求属性?

您是不是在混淆HTTP请求/响应如何工作?当关联的响应完成时,请求将完成/加载,包括所有属性。每个后续请求都是一个全新的请求,它不包含与前一个相同的属性。

你真的不想使用会话范围吗?登录时执行以下操作:

request.getSession().setAttribute("user", user);

然后在身份验证过滤器中进行以下操作:

if (((HttpServletRequest).getSession().getAttribute("user") != null) {
    chain.doFilter(request, response); // Continue.
} else {
    ((HttpServletResponse) response).sendRedirect("login"); // Redirect to login.
}

另见: