我的拦截器问题在哪里,为什么我连login.jsp都打不开了

我的拦截器问题在哪里,为什么我连login.jsp都打不开了

package com.imooc.web.filter;

import java.io.IOException;
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;


public class AuthFilter implements Filter {
	public void init(FilterConfig fConfig) throws ServletException {
		// TODO Auto-generated method stub
	}
	
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		 HttpServletRequest req= (HttpServletRequest)request;
		 HttpServletResponse res=(HttpServletResponse)response;
		 String user=(String)req.getSession().getAttribute("existList");
        if(user!=null) {
        	chain.doFilter(request, response);
        	return;
        }else {
        	request.setAttribute("msg", "密码或用户名错误");
        	res.sendRedirect(req.getContextPath()+"/login.jsp");
        	return;
        }
		
		
	}
	
	public void destroy() {
		// TODO Auto-generated method stub
	}

	

	

}
<filter>
    <filter-name>AuthFilter</filter-name>
    <filter-class>com.imooc.web.filter.AuthFilter</filter-class>
 </filter>
  <filter-mapping>
     <filter-name>AuthFilter</filter-name>
     <url-pattern>/*</url-pattern>
  </filter-mapping>


正在回答

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

2回答

同学你好,关于报500的问题老师在这个问答中回复了你:

https://class.imooc.com/course/qadetail/217325

关于同学的这个思路是可以的,但老师建议先是否有session中有用户,

如果之前已经登录了,就可以直接放行,没必要去拦截了,

如果没登录,也就是session中没有对应的用户,我们再去判断是否拦截,要放行哪些会比较合理一些。

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

好帮手慕阿莹 2020-04-24 17:52:23

同学你好,因为去访问login.jsp的时候还是会经过这个过滤器,进入判断,成为一个死循环。

可以如下所示,我们判断一下在没登录的情况下,如果包含登录等信息,我们就放行,否则重定向到登录的页面

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
   HttpServletRequest req= (HttpServletRequest)request;
   HttpServletResponse res=(HttpServletResponse)response;
   String user=(String)req.getSession().getAttribute("existList");
   String uri = req.getRequestURI();
   if(user!=null) {
       chain.doFilter(request, response);
       return;
   }
   //在上边没有登录的情况下,如果不包含登录的地址,我们都拦截一下,如果包含,则放行使其去访问登录等jsp,登录的servlet等
   if(uri != null && uri.indexOf("login") == -1){
       res.sendRedirect(req.getContextPath()+"/login.jsp");
   } else {
       chain.doFilter(request, response);
   }


}

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

  • 提问者 慕标0359786 #1
    这样做的话,他还会拦截的其他的不需要拦截的servlet,如/KaptchaServlet,我看不到验证码了。
    2020-04-24 18:03:17
  • 好帮手慕阿莹 回复 提问者 慕标0359786 #2
    这里同学需要一一的进行放行哦,,同学可以参考放行login的代码,在if的判断条件中加上: || uri.indexOf("Kaptcha") == -1 其他的同理哦。祝学习愉快
    2020-04-24 18:06:10
  • 提问者 慕标0359786 回复 好帮手慕阿莹 #3
    登录之后不会跳转到管理页面了
    2020-04-24 18:15:40
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星

相似问题

登录后可查看更多问答,登录/注册

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

在线咨询

领取优惠

免费试听

领取大纲

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