java - 记录url导航历史记录

标签 java servlets servlet-filters

目标:用户尝试在未经身份验证的情况下访问页面。网站重定向到登录页面,当他们输入详细信息时,他们会返回到他们尝试访问的页面。

我有一个过滤器,用于记录用户在 session 中最后访问的 URL。下面的代码是我如何获取uri。

String uri = request.getRequestURI().toString();
String queryString = request.getQueryString();  
String completeUri = uri;
if (queryString != null)
{
    completeUri += "?" + queryString;
}

在实践中,这个过滤器接缝捕捉外部CSS文件、页面上的单个图像等,所以大约一半的时间它工作,一半的时间它指向图像或CSS文件。

过滤器的映射是...

<filter>
    <filter-name>ComprehensiveFilter</filter-name>
    <filter-class>core.website.control.filter.ComprehensiveFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>ComprehensiveFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

所以问题是。为什么我的代码存储图像和外部文件而不是用户刚刚访问的 URL?我认为这与我的过滤器映射有关。

最佳答案

仅当您检测到未经授权的访问并重定向到登录页面时,才应使用此代码。你应该将它作为参数传递,例如 response.sendRedirect("login.jsp?" + completeUri)

现在,如果过滤器应用于每个资源(正如您所做的那样),则包含在 login.jsp 中的图像和 css 文件将触发该过滤器。您必须从该重定向中排除login.jsp 本身(否则您将进入循环),并且还必须排除css 文件。这取决于您的 URL 方案。

  • 如果您的所有页面都是 .jsp ,然后将过滤器映射到 *.jsp
  • 如果您的操作是通过单个 servlet(例如调度程序 servlet),则将过滤器映射到该 servlet(而不是 <uri-pattern> set <servlet-name> )
  • 如果您有“漂亮的网址”,则(在过滤器中)检查请求的资源是否以 .css 结尾, .png , .gif等等,并且不输入重定向逻辑。

关于java - 记录url导航历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6757653/

相关文章:

java - 如何以编程方式从 Android 手机发送 XML 文件中的数据

java - 部署java servlets : how to atomatically do the .类文件复制并重启tomcat

java - 访问 x-www-form-urlencoded ServletRequest 的输入流

servlets - 为 Servlet Filter 提供多个 URL 模式

java - 从过滤器获取 servlet 参数值

java - 如何在 AbstractAnnotationConfigDispatcherServletInitializer Spring 中做过滤映射

java - 使用 @Transactional 注释的方法内部不会捕获异常

java - Oxygen.1a (4.7.1a) 的 FindBugs 插件

java - 变量的命名约定

java - 相同的选项在下拉列表中被选择两次,如何停止?