过滤器

Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。

创建一个过滤器,继承于Filter:,实现Filter的三个方法public class LoginFilter implements Filter {

    
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

        //初始化,当前的过滤器对象创建出来的时候,该方法会执行
        //一般在该方法中读web.xml中的参数

    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        //在这里请求进行过滤
        HttpServletRequest req = (HttpServletRequest) request;
        HttpSession session = req.getSession();
        //从session域中取出登录用户信息
        Object user = session.getAttribute("user");
        if (user != null){
            //对该请求放行
            chain.doFilter(request,response);

        }else {
            //用户没登录
            HttpServletResponse resp = (HttpServletResponse) response;

            //重定向回登录页面
            resp.sendRedirect("/log");

        }
    }
    @Override
    public void destroy() {
        //当前过滤器被销毁的时候被执行
        //一般用于释放资源

    }
}

创建完过滤器必须要在web.xml配置文件进行配置,才能使过滤器生效:

   <filter>
        <filter-name>LoginFilter</filter-name>
        <filter-class>com.lanou.demo.filter.LoginFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>LoginFilter</filter-name>
<!--设置哪些请求地址会经过该过滤器--> <url-pattern>/category/*</url-pattern> </filter-mapping>

<filter-class>中的名字是上面的过滤器名字;

另外Spring框架中带有一个过滤器,:

<filter>
        <filter-name>CharsetFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!--是指过滤的参数类型,可不写-->
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
    </filter>

 <filter-mapping>
        <filter-name>CharsetFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

注意:<filter>标签必须写在servlet标签之前

原文地址:https://www.cnblogs.com/zhouchangyang/p/10908011.html