JavaWeb中的Filter

Filter是一种用于拦截HTTP请求的技术,常用于权限控制、信息加密等场景。它作为Sun公司定义的一个接口,能够在请求到达Servlet之前进行预处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    1. Fillter
    • 功能上讲,Fillter是可以帮助我们队请求与响应过滤进行过滤。

      技术上讲,它是sun公司定义的一个接口:javax.servlet.Fillter。

      filter优先于servlet的执行,请求到达服务器后,许先经过filter再转发到servlet中处理。servlet能做的,filter也能做,但是反过来不行。所以filter可以代替servlet,但通常不会这么做,而是只用来做过滤用。

     

     

    1. Fillter的常用功能:信息拦截
      1. 过滤消息.
      2. 权限控制

     

    1. 生命周期
      1. 初始化:服务器启动加载filter时初始化,调用init方法.
      2. 服务期:服务器运行期间,多次调用doFilter方法.
      3. 消亡:服务器正常关闭时,调用destroy方法.

     

    1. 如何使用
      1. 创建一个类,实现javax.servlet.Filter接口.
      2. 重写接口中的三个方法:init、doFilter、destroy.
      3. 在web.xml文件中配置,指定拦截什么资源.

     

    1. filter的配置
      1. Filter的配置和servlet类似的配置

 

      • 注意:

        1. servlet-name、url-pattern两个都陪的情况下,tomcat6会执行两遍filter,而tomcat7以上不会出现异常。
        2. filter优先级由web.xml配置的filter的maping顺序有关,而非根据路径优先级。


    1. FillterConfig对象的作用(和ServletConfig差不多的功能)
      1. 获取Fillter的名称.
      2. 获得Fillter的配置参数.
      3. 获取ServletContext对象.

     

    1. Filter链(过滤链)
    • filter链是指多个filter同时拦截了同一个资源,则这些filter就形成了一个filter链,即过滤链。filter链常用与对消息的不同内容进行过滤等。

      1. 拦截的优先顺序按照web.xml文件中配置的先后顺序确定.
      2. 在拦截连中的某个filter执行完后,若放行,后面的filter才能拦截到,否则拦截不到.

     

    1. 那些请求能被拦截
    • 在web.xml配置文件中,有dispatcher配置项,决定了该过滤器拦截那些类型。前两个类型比较常用。

      1. REQUEST  :  拦截来自浏览器的请求。
      2. FORWARD  :  拦截来自服务器内部的请求转发的请求。
      3. ERROR  :  拦截500、404等错误。
      4. INCLUDE  :  拦截请求包含的请求。

     

    1. Filter中的一般处理流程
      1. 将request、response对象强转。原因是服务器内部传过来的也是HttpServletXxx的对象。ServletRequest、ServletResponse是其父类。要是不强转,HttpServletXxx子类特有的方法将无法使用。所以一般强转。
      2. 处理具体的过滤器处理操作。
      3. 将请求放行。

     

    1. 样例
      1. 自动登录过滤器,使用MD5加密(*****
        1. 在第一次登录成功后,将用户名、密码经加密后,存储到cookie中,保存在浏览器段。
        2. 下次访问网站时,若是在session中没取到user信息,则判断法国来的cookie中是否携带用户名、密码信息
          1. 存在,则自动登录。
          2. 不存在,将客户端账户、密码信息清空。
      2. Url级别权限控制(***
        1. 在访问某个资源时,先校验用户是否登录,是,往下执行,否则屏蔽.
        2. 验证用户的权限等级是否满足,是,则往下,否则中断.
        3. 将请求转发到要访问的资源.

                                        注:权限较多可使用配置文件存储每个角色能访问的路径.

     

    1. 自动登录中的信息安全性问题
      1. web应用中,用户的密码通常是使用MD5加密(不可逆加密)后,存储到数据库中。
      2. 用户第一次登录过后,将用户名和加密后的密码存储在cookie中。
      3. 自动登录时:
        1. 获取到cookie中的密码密文。
        2. 从数据库获取到用户密码的密文。
        3. 两者对比,即可验证。

     

    cookie中的密文的加密是不可逆的,也就无法破解出原始密码。

    cookie的不可移动性由浏览器保证。也就是说cookie文件时无法移动的,你无法从一个浏览器将cookie移动到另一个浏览器中使用。

    cookie端、数据库端存储的都是密文。若正常登陆,则将密码加密后得到密文,再去比较验证。

    注:目前最安全的加密算法是MD5加密了,号称不可逆算法,无法破解。但其实该算法已经被破解了,但破解算法没有被公开。不公开的原因是会对业界造成……..你懂的。

     

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值