XML 过滤器配置

在web开发过程中,往往需要在web.xml中进行过滤配置,对用户的请求以及服务器的响应进行过滤。 

 过滤器的实现总结:

  1、定义一个类实现Filter接口
  2、在init()初始化方法中获取web.xml中配置的参数值
  3、在doFilter方法中实现过滤逻辑

Filter接口提供了三个方法:

init():初始化,读取web.xml中配置的参数

doFilter():实现过滤逻辑

destory():注销该过滤器

public interface Filter {
    default void init(FilterConfig filterConfig) throws ServletException {
    }

    void doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3) throws IOException, ServletException;

    default void destroy() {
    }
}
下面举例说明过滤器的用法:该过滤器禁止某些IP访问应用

定义类实现Filter接口:

package Filter;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class IpFilter implements Filter {
    protected FilterConfig filterConfig ;
    protected String ip;
    //过滤器初始化的时候调用,在过滤器初始化过程中从web配置文件读取参数的内容
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        this.filterConfig = filterConfig;
        this.ip = this.filterConfig.getInitParameter("ip");
    }
    //实现过滤操作
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        String remoteIp = servletRequest.getRemoteAddr();
        if (remoteIp.equals(ip)) {
            servletResponse.setCharacterEncoding("GBK");
            PrintWriter out = servletResponse.getWriter();
            out.println("<b>你的IP地址被禁止访问.</b>");
        } else {
            filterChain.doFilter(servletRequest, servletResponse);
        }
    }

    @Override
    public void destroy() {

    }
}
web.xml中过滤器的配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <!--IP过滤的过滤器配置-->
    <filter>
        <filter-name>IpFilter</filter-name>
        <filter-class>Filter.IpFilter</filter-class>
        <!--在初始化的时候加载的参数-->
        <init-param>
            <param-name>ip</param-name>
            <param-value>127.0.0.1</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>IpFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!--编码过滤器的配置-->
    <filter>
        <filter-name>SetCharacterEncoding</filter-name>
        <filter-class>
            Filter.SetCharacterEncodingFilter
        </filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>gb2312</param-value>
        </init-param>
        <init-param>
            <param-name>enable</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>SetCharacterEncoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!--Servlet配置-->
    <servlet>
        <servlet-name>HelloWorlds</servlet-name>
        <servlet-class>HelloWorld.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloWorlds</servlet-name>
        <url-pattern>/HelloWorld</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>AcceptForm</servlet-name>
        <servlet-class>servlets.AcceptForm</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>AcceptForm</servlet-name>
        <url-pattern>/AcceptForm</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>AcceptLink</servlet-name>
        <servlet-class>servlets.AcceptLink</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>AcceptLink</servlet-name>
        <url-pattern>/AcceptLink</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>FileReader</servlet-name>
        <servlet-class>servlets.FileReader</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>FileReader</servlet-name>
        <url-pattern>/FileReader</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>FileWriter</servlet-name>
        <servlet-class>servlets.FileWriter</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>FileWriter</servlet-name>
        <url-pattern>/FileWriter</url-pattern>
    </servlet-mapping>
</web-app>


--------------------- 
作者:ri_mu_xi_shan 
来源:CSDN 
原文:https://blog.csdn.net/ri_mu_xi_shan/article/details/79351799 
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/Leo_01169/article/details/86482934
今日推荐