大家帮忙看一下我的登录过滤器代码哪里写错了?

Glide 发布于 2013/12/04 20:56
阅读 336
收藏 0

这个配置文件

<filter>
		<filter-name>LoginFilter</filter-name>
		<filter-class>cn.geowind.waimai.filter.LoginFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>LoginFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>



这是过滤器的代码

public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest req = (HttpServletRequest) request;
		// String uri = config.getInitParameter("abortFilterUri");
		String uri = req.getRequestURI();
		String path = req.getServletPath();
		System.out.println("uri:" + uri);
		System.out.println("path:" + path);
		if (req.getSession().getAttribute("user") == null) {
			// if (uri.endsWith("login.jsp")) {
			if (path.equals("/login.jsp") || path.equals("/login")) {
				System.out.println("doNotFilter");
			} else {
				System.out.println("doFilter");
				req.getRequestDispatcher("login.jsp")
						.forward(request, response);
				// HttpServletResponse resp = (HttpServletResponse) response;
				// resp.sendRedirect("login.jsp");
			}
		}
		// chain.doFilter(request, response);
	}



现在的情况是其他在未登录状态下访问其他页面可以跳转到login.jsp。可是直接访问login.jsp或/login 这个servlet时就是现实空白了。不知道是怎么回事。我的项目里面就只有这一个过滤器。

求大家帮忙看看。感激不尽。

加载中
0
LucEsape
LucEsape
public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest req = (HttpServletRequest) request;
		// String uri = config.getInitParameter("abortFilterUri");
		String uri = req.getRequestURI();
		String path = req.getServletPath();
		System.out.println("uri:" + uri);
		System.out.println("path:" + path);
		if (req.getSession().getAttribute("user") == null) {
			if (path.equals("/login.jsp") || path.equals("/login")) {
				System.out.println("doNotFilter");
				// add code 
				chain.doFilter(request, response);
			} else {
				System.out.println("doFilter");
				req.getRequestDispatcher("login.jsp")
						.forward(request, response);
				// HttpServletResponse resp = (HttpServletResponse) response;
				// resp.sendRedirect("login.jsp");
			}
		}
	}

你拦截到 /login.* 的时候没有进入过滤链,导致过滤链断了。

LucEsape
LucEsape
回复 @Folyd : 恭喜你哈 :)
Glide
Glide
明白了。必须要有doFilter()才行。
0
☆冰山一角☆

12行下加上

chain.doFilter(request, response);

Glide
Glide
加过试了一下,还是不行。
0
☆冰山一角☆
打断点,进去了吗?
Glide
Glide
两个System.out都有输出。还是不知道是什么原因。另外用sendRedirect()效果又不一样。
0
渔樵耕读
渔樵耕读

转发 改成 重定向

resposne.sendRedirect();

Glide
Glide
这个我也试了,也不行。而且访问其他页重定向到login.jsp也是显示空白。
0
duty
duty
看看你的 if 判断条件是否成立。
Glide
Glide
应该是没错的。应为两个System.out都输出了。
0
a
adan2013
直接访问login,你是过滤到了,但什么事情都没做当然没页面,直接login就没有必要过滤了
返回顶部
顶部