zoukankan      html  css  js  c++  java
  • Java Web idea Filter配置(过滤器配置)

    一、过滤器的概述
    1.1过滤器的概念及作用
    概念
    过滤器是一个能够拦截客户端与服务端请求和响应的web组件(Servlet、Filter、Listener)。

    2.画图分析

     

    拦截请求:在请求到达客户端要访问的web资源前拦截请求。

    拦截响应:在响应到达客户端之前拦截响应  。

    为什么要使用过滤器
    在实际项目中,我们对访问某些资源的请求需要进条件的筛选、过滤。当这个请求满足特定情况,才能让这个请求访问目标资源,如果不满足条件,就不让访问目标资源。比如,我们在论坛上发帖,网络网网需要对所发的内容进行过滤,如果有不适合的 字眼,就需要对其特殊处理。这就是通过过滤来完成。

    二、过滤的应用场景
    1.过滤论坛中的非法字符

    2.登录权限检查

    3.统一处理项目的中文乱码(请求和响应的中文乱码)

    三、过滤开发入门
    需求:编写一个Filter,拦截浏览器发给HelloServlet的请求

    步骤:

    1.用Filter接口的doFilter方法进行请求和响应的拦截。

    2.开发步骤:

    【实现Filter接口】
    第一步:编写一个普通的java类HelloFilter,实现Filter接口,重写doFilter方法;
    第二步:在doFilter方法中打印"请求被拦截了......";

    【配置Filter】
    第一步:在web.xml文件中配置Filter的类路径:
    <filter>
    <filter-name>HelloFilter</filter-name>
    <filter-class>com.heima.filter.HelloFilter</filter-class>
    </filter>
    第二步:配置HelloFilter拦截的Servlet的映射路径:
    <filter-mapping>
    <filter-name>HelloFilter</filter-name>
    <url-pattern>/helloServlet</url-pattern>
    </filter-mapping>
    3.编写HelloServlet,配置映射路径为/helloServlet

    4.启动tomcat,访问HelloServlet。

    实现:

    package com.mazai.filter;

    import javax.servlet.*;
    import java.io.IOException;

    /**
    * @author buguniao
    * @version v1.0
    * @date 2018/12/16 23:38
    * @description TODO
    **/
    public class HelloFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    System.out.println("请求被拦截了..............");
    }

    @Override
    public void destroy() {

    }
    }
    第二步:

    1.配置Filter

    第一步:在web.xml文件中配置Filter的类路径:
    <filter>
    <filter-name>HelloFilter</filter-name>
    <filter-class>com.heima.filter.HelloFilter</filter-class>
    </filter>
    第二步:配置HelloFilter拦截的Servlet的映射路径:
    <filter-mapping>
    <filter-name>HelloFilter</filter-name>
    <url-pattern>/helloServlet</url-pattern>
    </filter-mapping>
    2.编写HelloServlet,配置映射路径/helloServlet

    package com.mazai.servlet;

    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;

    /**
    * @author buguniao
    * @version v1.0
    * @date 2018/12/16 23:54
    * @description TODO
    **/
    @WebServlet("/helloServlet")
    public class HelloServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doGet(request, response);
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    System.out.println("HelloServlet接收请求......");
    }
    }
    3、启动tomcat,访问HelloServlet,通过测试,发现请求被拦截了,并没有到达HelloServlet。如果需要放行,则需要在Filter中编写以下代码 :

    四、Filter的注解开发
    Servlet3.0版本的Filter提供了注解开发,注解能够取代对Filter的配置,使得Filter的开发更高效;配置Filter使用的注解是:@WebFilter(urlPatterns = "/demo") 。

    1、Filter的注解开发步骤
    第一步:创建一个普通的java类实现Filter接口,重写抽象方法;
    第二步:在这个类上面使用@WebFilter注解进行映射路径的配置,如:@WebFilter(urlPatterns = "/demo");
    第三步:重写doFilter方法,进行具体的业务逻辑处理;

    【注解开发示例】AnnDemo1Filter.java

    import javax.servlet.*;
    import javax.servlet.annotation.WebFilter;
    import java.io.IOException;

    @WebFilter(urlPatterns = "/demo")
    public class AnnDemo1Filter implements Filter{
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

    }

    @Override
    public void destroy() {

    }
    }
    2、使用IDEA的Filter注解模板
    IDEA开发工具提供了Filter注解模板帮助我们简化Filter的注解开发,具体做法如下:

    第一步:配置Filter注解模板

    #if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end
    #parse("File Header.java")
    @javax.servlet.annotation.WebFilter(urlPatterns = "/")
    public class ${Class_Name} implements javax.servlet.Filter {

    public void init(javax.servlet.FilterConfig config) throws javax.servlet.ServletException {
    }
    public void doFilter(javax.servlet.ServletRequest req, javax.servlet.ServletResponse resp, javax.servlet.FilterChain chain) throws javax.servlet.ServletException, java.io.IOException {
    chain.doFilter(req, resp);
    }
    public void destroy() {
    }
    }
    第二步:使用模板创建Filter;

    在任意包下面,鼠标右键new--->Filter

    3、注解开发注意事项
    当有多个Filter都对同一个请求路径进行拦截的时候,xml配置和注解中Filter执行顺序不一样!!!

    xml配置方式的Filter,执行顺序按照在web.xml中配置的顺序,从上到下执行;

    注解开发的Filter,执行的顺序是按照实现类的字母表顺序依次执行!

  • 相关阅读:
    Web API 强势入门指南
    毫秒必争,前端网页性能最佳实践
    Windbg Extension NetExt 使用指南 【3】 ---- 挖掘你想要的数据 Managed Heap
    Windbg Extension NetExt 使用指南 【2】 ---- NetExt 的基本命令介绍
    Windbg Extension NetExt 使用指南 【1】 ---- NetExt 介绍
    WCF : 修复 Security settings for this service require Windows Authentication but it is not enabled for the IIS application that hosts this service 问题
    透过WinDBG的视角看String
    Microsoft Azure Web Sites应用与实践【4】—— Microsoft Azure网站的“后门”
    企业IT管理员IE11升级指南【17】—— F12 开发者工具
    WCF : 如何将NetTcpBinding寄宿在IIS7上
  • 原文地址:https://www.cnblogs.com/lpbk/p/11676573.html
Copyright © 2011-2022 走看看