我们在进行项目开发时,一般来说对于项目需求都需要对一些请求和一些特定的页面进行过滤和释放。
这里我们需要调用Filter方法,我们需要简单了解一下filter的生命周期
Filter 生命周期 *1.创建 tomcat 容器启动时 *2.执行 一次请求执行一次doFilter *3.销毁 destroy 服务器正常关闭时 一次
下面是一个简单的例子:非法请求的过滤器
@WebFilter("/*") public class LoginFilter implements Filter { public LoginFilter(){ System.out.println("LoginFilter 对象被创建"); } //初始化方法 对象创建后 自动调用 只会调用一次 @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println(" LoginFilter init() 方法被调用"); } //拦截请求的具体处理方法 执行多次 @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { //获取session中保存的user对象 通过user对象的获取情况 判定用户是否登录 HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse resp = (HttpServletResponse) response; Object user = req.getSession().getAttribute("user"); //放行特定的页面 login.jsp reg.jsp //获取请求路径 String servletPath = req.getServletPath(); System.out.println( "servletPath = " + servletPath ); if (servletPath.equals( "/login.jsp" )||servletPath.equals( "/reg.jsp" )){ //放行 chain.doFilter( req,resp); return; } //放行特定的请求 login reg String method = req.getParameter( "method" ); if ("login".equals( method )||"reg".equals( method )){ chain.doFilter( req,resp ); return; } //放行静态资源 if (servletPath.startsWith( "/static" )){ chain.doFilter( req,resp ); return; } if(user!=null){ //放行请求 chain.doFilter( req,resp ); }else{ //将页面跳转至登录页 resp.sendRedirect( req.getContextPath()+"/login.jsp" ); } //放行请求 // chain.doFilter(request,response); } //销毁时执行的方法 @Override public void destroy() { } }