登录过滤器导致重定向循环

时间:2012-06-11 06:32:25

标签: java jsp servlets servlet-filters

我正在使用servlet和JSP创建一个简单的Web应用程序。我正在实现一个过滤器,它检查用户是否已经登录,从字面上检查用户会话是否还活着。如果会话不活动,则必须将用户重定向到登录页面(index,jsp)

这是我在web.xml文件中的过滤器映射

 <web-app xmlns...>
  <display-name>FilterTest</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <filter>
    <filter-name>LoginFilter</filter-name>
    <filter-class>LoginFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <servlet>
    <description></description>
    <servlet-name>LoginController</servlet-name>
    <servlet-class>LoginController</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>LoginController</servlet-name>
    <url-pattern>/LoginController</url-pattern>
  </servlet-mapping>
</web-app>

当用户尝试访问其他页面时,LoginFilter会检查会话。如果会话处于活动状态,则会将用户重定向到请求的页面,否则会重定向到index.jsp。

我面临的问题是,即使用户登录,LoginFilter也会检查会话(请求来自index.jsp,即登录页面)。 所以我在这里看到的是,当用户登录时,控件转到LoginFilter,因为尚未为该用户创建会话,他被重定向回登录页面,这将创建一个无限期的重定向循环。

如果请求来自index.jsp,我想排除过滤器检查/会话检查。

有什么方法可以实现这个目标吗?或者我可以通过哪种方式确定请求页面是index.jsp

更新:应用启动时的网址为http://servername:port/FilterTest 这里加载了index.jsp。

我正在验证LoginController servlet中的登录,如果登录成功,它会将用户重定向到home.jsp(欢迎页面)。

谢谢..!

1 个答案:

答案 0 :(得分:4)

跳过Filter检查登录页面

您需要检查requestedUrl并查看它是否不需要Filter(对于LoginPage,CSS,Images,JS)然后只需执行

chain.doFilter(request, response);  

将init参数从Filter传递给web.xml  从init()创建List<String> urls,不需要过滤检查 现在在doFilter()检查网址是否只是chain.doFilter(request, response);

之一