我的拦截器问题在哪里,为什么我连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 星