【问题标题】:Java Servlet Filter redirect problemJava Servlet过滤器重定向问题
【发布时间】:2011-01-12 12:59:06
【问题描述】:

我的身份验证过滤器有问题。当过滤器重定向到登录页面时,登录 JSP 中不会显示任何图像。但是,如果我在登录后手动进入登录页面,则会显示图像。

我不明白为什么会这样!我很感激任何帮助。 :-)

验证过滤器:

if (authorized == null && path.indexOf("Auth") == -1 && path.indexOf("Login") == -1 ) {
        httpResponse.sendRedirect("Login");  
        return;  
} else {  
        chain.doFilter(request, response);  
}

登录小服务程序:

// Just using a servlet in case I want more data sent to the jsp
Dispatcher.dispatch("views/login.jsp", request, response);

login.jsp:

<img src="images/logo.png" />

jsp 在其他方面是“正常的”,所有必需的 HTML 标记都存在。 “images”文件夹位于项目的默认“web”文件夹中,与所有其他 jsp 和 javascript 一起。

提前感谢您的帮助。 :)
- 斯蒂安

【问题讨论】:

    标签: java servlets servlet-filters


    【解决方案1】:

    难道您的过滤器也适用于图像请求并将logo.png 的请求重定向到login.jsp

    如果是这样,您可以调整web.xml 中的filter-mapping

    【讨论】:

    • 我认为您在这里有所作为。当我在 Firefox 中查看 login.jsp 的源代码,然后单击指向图像的链接时,我得到了 404:请求的资源 (/PJ600/images/Login) 不可用。调整过滤器映射是什么意思?
    【解决方案2】:

    这是因为相对路径。

    • 您的 Login 位于上下文的根目录中
    • 你的图片可能是/views/images/
    • 当您转发时,浏览器只知道请求的 URL。

    因此,当您转发时,将在/images 查找图像(因为它们与当前地址相关)而不是/views/images/

    如何解决。两种选择:

    • 不要从您的 servlet 转发;改为重定向
    • 不要从过滤器重定向到servlet;直接跳转到登录页面

    更新: 确保图像不受过滤器的影响。两种选择:

    • 它们不应与过滤器模式匹配
    • 过滤器中的 .png、.jpeg、.css 等不应发生重定向。用request.getRequestURI()检查这个

    【讨论】:

    • 我尝试从过滤器重定向到 login.jsp,但没有成功。当我在 Firefox 中查看源代码并单击图像时,它说页面没有正确重定向.所以可能是导致这个问题的过滤器。
    • 啊,那么您必须从过滤器中排除图像 - 请参阅我的更新
    • 感谢您的帮助,现在我知道问题出在哪里了。 :)
    猜你喜欢
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 2015-05-02
    • 2011-07-15
    • 2015-12-02
    • 2013-09-02
    • 2011-06-29
    相关资源
    最近更新 更多