在一个javaweb项目上,添加了一个filter,用来判断用户是否登陆,如果登陆请求继续,未登陆则重定向到等领域页面。
可是加上该filter后,访问网站,出现了”此网页包含重定向循环“这个问题。请问怎么解决?
filter代码如下:
web/xml:
<filter>
<filter-name>loginFilter</filter-name>
<filter-class>com.xxx.xxxc.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
filter代码:
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) arg0;
HttpServletResponse response = (HttpServletResponse) arg1;
HttpSession session = request.getSession();
User user = (User) session.getAttribute("admin");
if(user != null){
arg2.doFilter(request, response);
}else{
response.sendRedirect(request.getContextPath()+"/page/login.jsp");
}
}
请看一下,是哪里的问题。
------解决思路----------------------
这一行跳转到login.jsp会又进过滤器进行重复跳转,那这个时候就会出现重定向循环;
response.sendRedirect(request.getContextPath()+"/page/login.jsp");
解决方法就是当遇到login.jsp进来的时候直接进这个:arg2.doFilter(request, response);
------解决思路----------------------
过滤的东西有问题啊,你说你发送一个请求过滤后,定向到登陆也的JSP,这个也是要过滤的,你把/*改了,除了登陆页,其他都可以用,你把登陆页也过滤了,肯定重复发送啊 - -!!
------解决思路----------------------
这么说吧 楼主知道重定向的含义吧?
,重定向就是结束此次请求 发起一个新的请求
而楼主配置的过滤器 过滤所有的请求
当第一次请求中 user==null时,则会发起新的第二次请求 指向 request.getContextPath()+"/page/login.jsp" 地址(即重定向)
第二次请求也会经过过滤器,此时user仍为null 故又重定向
第三次请求也会经过过滤器,此时user仍为null 故又重定向
、、、、、
如此反复,无限重定向