过滤器访问页面一直显示不正常

过滤器访问页面一直显示不正常

package com.zt.filter;

import java.io.IOException;
import java.util.List;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.zt.user.User;



public class AuthFilter implements Filter {


	public void destroy() {
		
	}

	
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		HttpServletRequest hsRequest=(HttpServletRequest)request;
		HttpServletResponse hsResponse=(HttpServletResponse)response;
		
		List<User> list=(List<User>)hsRequest.getServletContext().getAttribute("userList");
		if(list.isEmpty()) {
			hsResponse.sendRedirect(hsRequest.getContextPath()+"/login.jsp");
			
		}else {
		chain.doFilter(request, response);
		
		}
	}


	public void init(FilterConfig fConfig) throws ServletException {
		
	}

}

页面一直显示

该网页无法正常运作

localhost 将您重定向的次数过多。


正在回答

登陆购买课程后可参与讨论,去登陆

3回答

同学你好!

你在重定向之前自己创建seesion试试,比如:

request.getSession();
if(list.isEmpty()) {
			hsResponse.sendRedirect(hsRequest.getContextPath()+"/login.jsp");
			
		}else {
		chain.doFilter(request, response);
		
		}

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

  • 慕仔0431810 提问者 #1
    还是不行,页面一直显示 localhost将您重定向次数过多。我觉得会不会是没有用户信息,页面就一直重定向,进入了死循环这个状态了呢
    2019-12-13 13:35:37
好帮手慕柯南 2019-12-13 15:29:40

同学你好!

一直这样的原因是因为:

你拦截的是所有的页面*.jsp页面,这样导致你重定向到login.jsp也被拦截了,导致一直循环执行

http://img1.sycdn.imooc.com//climg/5df33cb70917ad8304800086.jpg

修改建议:不要拦截所有的jsp页面,将login.jsp排除,比如:

可以将其它的页面放在一个文件夹下,拦截时拦截这个文件夹下的页面,假设放其它页面的文件夹是BookManagementPage,xml中可以这么写:

http://img1.sycdn.imooc.com//climg/5df33dd9095ef25d07120127.jpg

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~



好帮手慕小班 2019-12-12 18:11:14

同学你好,同学的控制台有没有报错信息显示呐,建议同学将自己的web.xml内容贴出,老师拼接代码测试运行一下。这里老师只测试添加AuthFilter,是可以正常过滤的。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 慕仔0431810 #1
    控制台显示: 严重: Servlet.service() for servlet [jsp] in context with path [/login_library] threw exception [javax.servlet.ServletException: java.lang.IllegalStateException: Cannot create a session after the response has been committed] with root cause java.lang.IllegalStateException: Cannot create a session after the response has been committed at org.apache.catalina.connector.Request.doGetSession(Request.java:2993) at org.apache.catalina.connector.Request.getSession(Request.java:2432)
    2019-12-12 19:33:30
  • 提问者 慕仔0431810 #2
    XML配置: <filter> <filter-name>AuthFilter</filter-name> <filter-class>com.zt.filter.AuthFilter</filter-class> </filter> <filter-mapping> <filter-name>AuthFilter</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping>
    2019-12-12 19:34:27
  • 提问者 慕仔0431810 #3
    清楚eclipse缓存后 ,控制台 不显示错误了 但是在页面中访问http://localhost:8080/login_library/login.jsp 一直是显示 该网页无法正常运作localhost 将您重定向的次数过多。
    2019-12-12 19:38:41
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师