我的拦截器问题在哪里,为什么我连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>
17
收起
正在回答
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); } }
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
2. 从网页搭建入门JavaWeb
- 参与学习 人
- 提交作业 676 份
- 解答问题 9666 个
本阶段将从前端网页搭建入手,到Java Web基础,前后端结合助你完成Java Web小白的蜕变!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星