• JSP Filter用法


    1.filter的作用
    • 在HttpServletRequest请求到达Servlet之前,拦截客户的HttpServletRequest
    • 根据需要检查HttpServletRequest的相关信息,修改头信息和数据
    • 在HttpServletResponse到达客户端之前可以进行拦截
    • 在HttpServletResponse到达客户端之前可以进行检查,也可以修改头信息和数据
    2.实现方式
    • 定义一个类,继承自javax.servlet.Filter类
    • 实现javax.servlet.Filter的init(),destroy(),doFilter()方法
    • 配置filter在web.xml或者filter的代码中
    3.具体实现
    package com.filter;
    import javax.servlet.*;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;
    import java.io.IOException;
    public class LogFilter  implements Filter  {

    private FilterConfig config;
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    this.config=filterConfig;
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    ServletContext context=config.getServletContext();
    long time= System.currentTimeMillis();
    System.out.println("过滤开始");
    System.out.println(time);
    HttpServletRequest request=(HttpServletRequest)servletRequest;
    HttpSession session=request.getSession(true);
    String loginpage=config.getInitParameter("loginpage");
    if(session.getAttribute("username")==null&&!request.getContextPath().endsWith(loginpage)){
    servletRequest.getRequestDispatcher(loginpage).forward(servletRequest,servletResponse);
    }else{
    System.out.println(request.getContextPath());
    filterChain.doFilter(servletRequest,servletResponse);
    long atime= System.currentTimeMillis();
    System.out.println(time);
    System.out.println("过滤结束");
    System.out.println("请求被处理时间是:"+request.getContextPath()+"("+(atime-time)+")");
    }

    }

    @Override
    public void destroy() {
    config=null;
    }
    }
    
    
    4.在web.xml中的配置方法
    <filter>
    <filter-name>logs</filter-name>
    <filter-class>com.filter.LogFilter</filter-class>
    <init-param>
    <param-name>loginpage</param-name>
    <param-value>/login.jsp</param-value>
    </init-param>
    </filter>
    <filter-mapping>
    <filter-name>logs</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
    说明:filter.doFilter调用是用来区分拦截的前后的
    doFilter的使用可以进行权限的验证,日志的记录等方法
  • 相关阅读:
    洛谷 P2920 [USACO08NOV]时间管理Time Management
    湖南测试 1
    洛谷 P1824 进击的奶牛
    4、map 和 tuple
    -_-#【Better JS Code】插入迭代值
    -_-#【JS】defer / async
    -_-#【JS】HTML5 API
    【jQuery】jQuery API 过 一 遍
    ♫【函数】函数声明 / 函数表达式
    -_-#【Mac】命令
  • 原文地址:https://www.cnblogs.com/whyd/p/5228634.html
Copyright © 2020-2023  润新知