【问题标题】:Filter is not retrieving request.getAttribute()过滤器未检索 request.getAttribute()
【发布时间】:2011-02-19 16:22:42
【问题描述】:
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

【问题讨论】:

    标签: java servlets servlet-filters


    【解决方案1】:

    默认情况下,过滤器是在 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.
    }
    

    另见:

    【讨论】:

    • 不,这不起作用....当我单击注销按钮时。我被重定向到登录页面,但是当我按下后退按钮时,我再次被重定向到我想避免的注销页面
    • 这绝对有效。你只是有另一个问题。按。请多注意你的英语:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多