制作了一个防止未登录直接访问页面的过滤器,没有发现代码问题但是添加后,通过登录界面也无法访问页面了,debug也没有报错。后来发现是未添加请求路径,添加登录页面的请求路径就可以了。
package yhp.unit; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.http.HttpRequest; public class firstFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("初始化过滤器"); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("开始过滤"); //防止用户在未登录的情况下访问资源 HttpServletRequest request = (HttpServletRequest)servletRequest;//强转 HttpServletResponse response = (HttpServletResponse)servletResponse; String requestURI = request.getRequestURI();//得到请求地址 System.out.println(requestURI); Object uname = request.getSession().getAttribute("uname"); System.out.println(); //必须要把登录页面的请求路径给加上,不然就会一直不能登录 if(requestURI.endsWith("/index.jsp") || requestURI.endsWith("/getpassword")){//如果是登录界面或请求路径,放行 filterChain.doFilter(servletRequest, servletResponse); }else { if (uname == null){// System.out.println("uname == null"); response.sendRedirect("/index.jsp");//重定向到登录界面 }else { //放行 System.out.println("过滤结束"); System.out.println("uname != null"); filterChain.doFilter(servletRequest, servletResponse); } } } @Override public void destroy() { System.out.println("过滤器销毁"); } }