本文共 3613 字,大约阅读时间需要 12 分钟。
1、Filter 过滤器它是 JavaWeb 的三大组件之一。三大组件分别是:Servlet 程序、Listener 监听器、Filter 过滤器
2、Filter 过滤器它是 JavaEE 的规范。也就是接口 3、Filter 过滤器它的作用是:拦截请求,过滤响应。拦截请求常见的应用场景有:
1、权限检查 2、日记操作 3、事务管理 ……等要求: 在你的 web 工程下,有一个 admin 目录。这个 admin 目录下的所有资源(html 页面、jpg 图片、jsp 文件、等等)都必 须是用户登录之后才允许访问。
思考:根据之前我们学过内容。我们知道,用户登录之后都会把用户登录的信息保存到 Session 域中。所以要检查用户是否 登录,可以判断 Session 中否包含有用户登录的信息即可!!
<% Object user = session.getAttribute("user"); // 如 果 等 于 null , 说 明 还 没 登 录 if (user == null) { request.getRequestDispatcher("/login.jsp").forward(request,response); return; }%>
Filter 的工作流程图:
Filter 的代码:
package loey.filter;import javax.servlet.*;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import java.io.IOException;public class AdminFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { // 1、获取 Filter 的名称 filter-name 的内容 System.out.println("filter-name的值是:" + filterConfig.getFilterName());//filter-name的值是:AdminFilter// 2、获取在 Filter 中配置的 init-param 初始化参数 System.out.println("初始化参数username的值是:" + filterConfig.getInitParameter("username"));//初始化参数username的值是:root System.out.println("初始化参数url的值是:" + filterConfig.getInitParameter("url"));//初始化参数url的值是:jdbc:mysql://localhost:3306/test// 3、获取 ServletContext 对象 System.out.println(filterConfig.getServletContext().getInitParameter("username"));//context } /** * doFilter方 法 , 专 门 用 于 拦 截 请 求 。 可 以 做 权 限 检 查 */ @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpServletRequest = (HttpServletRequest) request; HttpSession session = httpServletRequest.getSession(); Object user = session.getAttribute("user");// 如果等于null,说明还没有登录 if(user == null){ request.getRequestDispatcher("/login.jsp").forward(request,response); return; }else{ //让 程 序 继 续 往 下 访 问 用 户 的 目 标 资 源 chain.doFilter(request,response); } } @Override public void destroy() { }}
web.xml 中的配置:
AdminFilter loey.filter.AdminFilter AdminFilter /admin/*
Filter 过滤器的使用步骤:
1、编写一个类去实现 Filter 接口 2、实现过滤方法 doFilter() 3、到 web.xml 中去配置 Filter 的拦截路径完整的用户登录
login.jsp 页面 == 登录表单<%@ page contentType="text/html;charset=UTF-8" language="java" %>登录页面 登录
LoginServlet 程序 :
public class LoginServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("utf-8"); resp.setContentType("text/html;charset=utf-8"); String username = req.getParameter("username"); String password = req.getParameter("password"); if("admin".equals(username) && "123".equals(password)){ req.getSession().setAttribute("user",username); resp.getWriter().write("登录成功!"); }else{ req.getRequestDispatcher("/login.jsp").forward(req,resp); } }}
Filter 的生命周期包含几个方法
转载地址:http://kmuki.baihongyu.com/