Java Servlet Filter重定向问题

时间:2010-02-03 08:59:22

标签: java servlets servlet-filters

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

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

AuthFilter:

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

登录servlet:

// 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和javascripts一起。

提前感谢您的帮助。 :)
- Stian

2 个答案:

答案 0 :(得分:7)

这是因为相对路径。

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

因此,当您转发时,会在/images(因为它们相对于当前地址)而非/views/images/

寻找图像

如何解决它。两个选项:

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

更新: 确保图像不受过滤器影响。两个选项:

  • 它们不应与过滤模式相匹配
  • 重定向不应该发生在过滤器中.png,.jpeg,.css等。请使用request.getRequestURI()
  • 进行检查

答案 1 :(得分:2)

是否您的过滤器也应用于图片请求,并将logo.png的请求重定向到login.jsp

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