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()方法进行处理
