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

标签 java jsp servlets servlet-filters

我正在使用 servlet 和 JSP 创建一个简单的 Web 应用程序。我正在实现一个过滤器,它检查用户是否已经登录,从字面上检查用户 session 是否处于 Activity 状态。如果 session 不存在,则必须将用户重定向到登录页面(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 将检查 session 。如果 session 处于 Activity 状态,则用户将被重定向到所请求的页面,否则将被重定向到index.jsp。

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

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

有什么办法可以实现这个目标吗?或者有什么方法可以识别请求页面是否是 index.jsp

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

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

谢谢..!

最佳答案

跳过您的 Filter检查登录页面

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

chain.doFilter(request, response);  

将初始化参数传递给Filter来自web.xml 来自init()创建 List<String> urls不需要过滤器检查 现在在doFilter()检查 URL 是否是其中之一,然后简单地 chain.doFilter(request, response);

关于java - 登录过滤器导致重定向循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10975364/

相关文章:

java - JSP 和服务器端延迟

java - 我如何处理//tomcat中的URI前缀?

java - 无法解析包含特殊字符的值?使用 sax 解析器

java - 如何使用 Selenium webdriver 解决屏幕尺寸非常小的问题

javascript - 使用 jQuery 添加/删除 css 类以通过 css 类识别元素

java - 如何确定正在呈现哪些 JSP 页面?

java - 设置选中复选框的限制

java - 底部导航项选定动画 onBackPressed

javascript - 如何知道点击了哪个按钮

tomcat - 如何在不重新启动tomcat6服务器的情况下重新加载servlet