Java Servlet Filter重定向问题

标签 java servlets servlet-filters

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

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

授权过滤器:

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);

登录.jsp:

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

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

在此先感谢您的帮助。 :)
- 斯蒂安

最佳答案

这是因为相对路径。

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

所以当你转发时,图片是在/images(因为它们是相对于当前地址)而不是/views/images/

如何解决。两种选择:

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

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

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

关于Java Servlet Filter重定向问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2190733/

相关文章:

java - 来自数据库的 Tapestry 模板或在运行时修改

java - Nodejs 在 Java 程序成功 POST 时并不总是触发 'data' 事件

java - 将文档上传到 Watson 的 Retrieve and Rank 服务

java - java中过滤器中的服务方法由谁来进行滚动?

java - WebFilter urlPattern 不工作

java - 当用户单击警报按钮时,打开移动浏览器并在 Android 应用程序上显示 URL

java - 如何让 ADmob 横幅广告显示在 Libgdx 中

java - 我们如何将 Json 对象从 servlet 传递到 JAVA 类文件?

servlets - Weblogic 10.3 - Servlet 失败并出现异常

java - 在 servlet 过滤器中向请求添加 HTTP header