我正在使用 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/