0

我正在使用 servlet 和 JSP 创建一个简单的 Web 应用程序。我正在实现一个过滤器,它检查用户是否已经登录,从字面上检查用户会话是否处于活动状态。如果会话不活跃,则必须将用户重定向到登录页面(索引,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

更新:应用程序启动时的 url 是http://servername:port/FilterTest 在这里加载 index.jsp。

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

谢谢..!

4

1 回答 1

4

跳过Filter对登录页面的检查

您需要检查 requestedUrl 并查看它是否不需要过滤器(用于 LoginPage、CSS、图像、JS)然后只需执行

chain.doFilter(request, response);  

将 init 参数传递给 from Filtercreate a现在不需要过滤器检查以检查 URL 是否是其中之一,然后简单地web.xmlinit()List<String> urlsdoFilter()chain.doFilter(request, response);

于 2012-06-11T06:34:36.980 回答