Java Web之过滤器的简单创建

Java Web开发中 的过滤器 ( filter ) 是 从Servlet 2.3规范开始增加 的 功能 , 并在Servlet 2.4规范中得到增强。 对Web应用来说 ,过滤器是 一个驻留在服务器端 的 Web组件 , 它可以截取客户端和服务器之间 的 请求与响应信息 , 并对这些信息进行过滤。

下面是创建一个基本过滤器的过程

首先创建一个类,并且实现Filter接口,这里要注意的是需要导入的是javax.servlet包

并且在类上加上注解@WebFilter(urlPatterns = "/*") urlPatterns指拦截的路径,/*表示所有路径

@WebFilter的常用属性

然后实现Filter接口的init(),doFilter(),destroy()方法

init()方法:初始化方法,加载时调用

destroy()方法:销毁时调用的方法

doFilter()方法:过滤方法

其中filterChain.doFilter(servletRequest,servletResponse);代码是放行的意思,进入下一个过滤器或Servlet。

一个过滤器的基本创建已经完成,下面是用过滤器实现的一个基本登录验证功能

JSP页面代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
  <head>
    <title>登陆界面</title>
  </head>
  <body>
  <form method="post" action="${pageContext.request.contextPath}/LoginServlet">
    请输入账号:<input type="text" name="name" ><br>
    请输入密码:<input type="password" name="pwd" ><br>
             <input type="submit" value="登录">
  </form>
  </body>
</html>

LoginServlet页面代码

LoginFilter过滤器页面

package xz.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebFilter("/*")
public class LoginFilter 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 {
        HttpServletRequest request = (HttpServletRequest)servletRequest;
        HttpServletResponse response = (HttpServletResponse)servletResponse;
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();

        String path=request.getServletPath();//获得请求路径
        Object name = request.getSession().getAttribute("name");//获取用户名
        if(path.indexOf("Login.jsp")==-1){//用户没有通过登录直接进入LoginServlet
            if(name==null){//判断是否登录
                out.print("<script>alert(请先登录!);location.href=Login.jsp</script>");//提示用户并返回登录页面
            }
        }
        //用户通过登录界面进入LoginServlet,则放行,进入LoginServlet
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {
        System.out.println("销毁");
    }
}

执行效果:

用户没有登录直接访问index主页,进入过滤器doFilter()方法进行处理


经验分享 程序员 微信小程序 职场和发展