有关过滤器的讲解我就不多加说明了,想要了解的可以自行看博文,写的很详细。
首先说说我想实现的功能,做学生信息管理系统的时候当用户注销后,虽然界面跳转到登录界面但当我们在地址栏中输入主界面地址还是跳转到主界面,我想此时你们想的是用session.invalidate(),这样就不会跳转到主界面中,但是这拦截的页面仅仅针对的是有调用session值的界面,对没有用到session值的页面并没有拦截,在地址栏中输入地址仍然可以正常网页,如果想避免这种问题因此用过滤器是个不错的选择。
代码:
package com.filter;import java.io.IOException;
import java.util.Enumeration;
import java.util.Vector;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.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import com.student.vo.User;public class FilterCon implements Filter {public void init(FilterConfig config) throws ServletException {//String initParam=config.getInitParameter("ref");//取得初始化参数//System.out.println("过滤初始化"+initParam);}public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {HttpServletRequest req=(HttpServletRequest)request;HttpServletResponse res=(HttpServletResponse)response;String uri=req.getRequestURI();if(uri.startsWith("/studentManageSystem/LoginServlet")||uri.startsWith("/studentManageSystem/login.jsp")||uri.startsWith("/studentManageSystem/image")||uri.startsWith("/studentManageSystem/js")){//对登录页面进行放行chain.doFilter(request, response);}else{HttpSession ses=req.getSession(); User user=(User)ses.getAttribute("myself");if(user!=null){chain.doFilter(request, response);}else{req.getRequestDispatcher("login.jsp").forward(req, res);}}}public void destroy() {System.out.println("过滤器销毁");}}