录制网址导航历史记录

时间:2011-07-20 06:04:42

标签: java servlets servlet-filters

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

我有一个过滤器,用于记录用户在会话中的最后一个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>

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

2 个答案:

答案 0 :(得分:1)

只有在您检测到未经授权的访问并重定向到登录页面时,才应使用此代码。你应该把它作为param传递,比如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等结尾,并且不要输入重定向逻辑。

答案 1 :(得分:0)

如果页面上有任何图片,即html <img>标记,则标记的src属性会引用实际网址(请参阅http://www.w3schools.com/tags/tag_img.asp)。因此,当加载页面时,浏览器会发送另一个加载该图像的请求。您的过滤器不仅会捕获整个页面的请求,还会捕获那些图像加载请求。