美文网首页
Java Web之过滤器

Java Web之过滤器

作者: MVBin | 来源:发表于2017-05-23 11:06 被阅读49次

知识点

1、 含义:过滤器是指对客户端向服务器端的web目标资源发出的请求,以及服务器端所做出的响应进行截取并处理。
2、 生命周期:①实例化(Web容器在部署Web应用程序时对所有过滤器进行实例化,也就是调用过滤器的构造方法)②初始化(实例化完成后立马对其进行初始化,也就是调用过滤器的init())③工作(也就是进行过滤URL,调用过滤器的doFilter())④销毁(web容器关闭时调用过滤器的destroy())
3、 分类:①request过滤器(过滤重定向请求,至少进行两次请求,两次响应,默认的过滤方式)②forward过滤器(过滤请求转发,进行一次请求,一次响应)③include过滤器(针对jsp页面的<jsp:include></jsp:include>里的路径进行过滤)④error过滤器(过滤web.xml文件中的<error-page></error-page>里的路径进行过滤)⑤async过滤器(异步过滤器)

字符编码过滤器

首先,在web.xml文件中进行过滤器的配置

<filter>
    <!-- 过滤器的名字 -->
    <filter-name>encodingFilter</filter-name>
    <!-- 过滤器类的完全限定名-->
    <filter-class>com.mvbin.filter.CharacterEncodingFilter</filter-class>
    <!-- 过滤器类的初始化参数 -->
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>   
<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <!-- 过滤器要过滤的请求路径:/* 表示过滤所有路径 -->
    <url-pattern>/*</url-pattern>
</filter-mapping>

其次,编写过滤器类的代码,过滤器继承javax.servlet.Filter,并实现其三个方法

import *****;

//字符过滤器类
public class CharacterEncodingFilter implements Filter {

    private String encoding;

    //过滤器的销毁方法,在web容器关闭时执行
    @Override
    public void destroy() {

    }

    //过滤器真正的核心方法,在这里对响应的请求进行过滤处理
    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        //将所有的请求的编码格式转化为UTF-8
        request.setCharacterEncoding(encoding);
        //调用FilterChain的doFilter方法,进行放行
        chain.doFilter(request, response);
    }

    //过滤器的初始化方法,在web容器启动时进行执行
    @Override
    public void init(FilterConfig config) throws ServletException {
        //通过FilterConfig的getInitParameter方法获取web.xml中配置的初始化参数
        this.encoding = config.getInitParameter("encoding");
        System.out.println("init: " + encoding);
    }
}

验证是否登录过滤器

首先,web.xml文件中进行配置

<!-- 验证是否登录过滤器 -->
<filter>
    <filter-name>checkLoginFilter</filter-name>
    <filter-class>com.mvbin.filter.CheckLoginFilter</filter-class>
    <!-- 配置不进行过滤验证的路径 -->
    <init-param>
        <param-name>noCheckUrl</param-name>
        <param-value>index.jsp,user.jspx</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>checkLoginFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>   

其次,编写过滤器代码

import ***;

//CheckLoginFilter类
public class CheckLoginFilter implements Filter {

    private String noCheckUrl;

    @Override
    public void destroy() {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        //进行强制类型转换
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse resp = (HttpServletResponse) response;
        //根据,进行字符串分割
        String[] urls = noCheckUrl.split(",");
        //获取session中是否存在loginUser
        User user = (User) req.getSession().getAttribute("loginUser");
        //foreach循环进行验证,包含不过滤的路径的话就放行
        for (String str : urls) {
            String uri = req.getRequestURI();
            //css文件及js文件也要可以通过过滤
            if(uri.indexOf(str) != -1 || uri.endsWith("css") || uri.endsWith("js")) {
                chain.doFilter(request, response);          
                return;
            }
        }
        //判断user是否为空
        if(user == null) {
            resp.sendRedirect("index.jsp");
        } else {
            //不为空则放行
            chain.doFilter(request, response);          
        }
    }

    @Override
    public void init(FilterConfig config) throws ServletException {
        //获取不过滤的路径
        this.noCheckUrl = config.getInitParameter("noCheckUrl");
    }
}

相关文章

  • Java Web之过滤器

    知识点 1、 含义:过滤器是指对客户端向服务器端的web目标资源发出的请求,以及服务器端所做出的响应进行截取并处理...

  • Java Web 之过滤器

    前言 学一学Java Web 三大组件之一过滤器。 Filter过滤器 Filter过滤器用来对Web资源进行一些...

  • Java Web使用过滤器防止Xss攻击,解决Xss漏洞

    web.xml添加过滤器 简化代码版本 过滤器代码 过滤器包装器代码 总结: 主要是使用Java Web的过滤器,...

  • 2018-08-23

    Java Web开发技术应用——过滤器 什么是过滤器:过滤源 ——> 过滤规则 ——> ...

  • Java三大器之过滤器、监听器、拦截器

    Java三大器之过滤器(Filter)的工作原理和代码演示Java三大器之监听器(Listener)的工作原理和代...

  • JAVA面试题 java web部分

    (一)Java web部分 1.Servlet和jsp页面过滤器Filter的作用及配置 【参考答案】 过滤器是一...

  • 后端Java跨域

    后端Java第一步:CORSFilter.java文件 过滤器 第二步:webapp > WEB-INFO > ...

  • Java Web之三大利器

    Java Web 三大利器主要有: 1.过滤器。2.拦截器。3.监听器。一、过滤器1.什么是过滤器?过滤器是Jav...

  • Java Web 三大利器

    Java Web 三大利器主要有: 1.过滤器。 2.拦截器。 3.监听器。 一、过滤器 1.什么是过滤器? 过滤...

  • JavaWeb三大组件之过滤器(Filter)

    title: JavaWeb三大组件之过滤器(Filter)tags: JavaWeb 过滤器categories...

网友评论

      本文标题:Java Web之过滤器

      本文链接:https://www.haomeiwen.com/subject/lomwxxtx.html