我的身份验证过滤器有问题。当过滤器重定向到登录页面时,登录 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/