• Java过滤器—Filter用法简介


    一.什么是Filter?
    Filter译为过滤器。 由于Servlet规范是开放的,借助于公众与开源社区的力量,Servlet规范越来越科学,功能也越来越强大。2000年,Sun公司在Servlet2.3规范中添加了Filter功能,并在Servlet2.4中对Filter进行了细节上的补充。

    二.运行原理:

    当客户端向服务器端发送一个请求时,如果有对应的过滤器进行拦截,过滤器可以改变请求的内容、或者重新设置请求协议的相关信息等,然后再将请求发送给服务器端的Servlet进行处理。当Servlet对客户端做出响应时,过滤器同样可以进行拦截,将响应内容进行修改或者重新设置后,再响应给客户端浏览器。在上述过程中,客户端与服务器端并不需要知道过滤器的存在。

    在一个Web应用程序中,可以部署多个过滤器进行拦截,这些过滤器组成了一个过滤器链。过滤器链中的每个过滤器负责特定的操作和任务,客户端的请求在这些过滤器之间传递,直到服务器端的Servlet。具体执行流程如下:



    三.实现例子:

    比如用户访问服务器admin文件夹下一个文件,使用filter拦截

    Servlet API中提供了一个Filter接口,实现过滤器只需要实现该接口即可

    首先创建一个Filter的java类,TestFilter.java,使其继承于接口Filter

    TestFilter.java:

    import java.io.IOException;
    import javax.servlet.Filter;
    public class TestFilter implements Filter
    {
    	@Override
    	public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
    			throws IOException, ServletException
    	{
    		// TODO Auto-generated method stub		
    		HttpServletResponse htteResp=(HttpServletResponse)arg1;			
    		if(false)   
             	{
    			htteResp.sendError(400,"无管理员权限访问!");
    			return;
    		}
    		else
    		{
    		        arg2.doFilter(arg0,arg1);  //不感兴趣,不做任何处理,继续执行代码
    		}
    	}
    }

    然后修改web.xml,添加如下节点:

      <filter>
        <filter-name>AdminFilter</filter-name>
        <filter-class>TestFilter</filter-class>   
      </filter>
      <filter-mapping>
      <filter-name>AdminFilter</filter-name>
       <url-pattern>/admin/*</url-pattern>
      </filter-mapping>

    这个意思是当url中有/admin/*这样的格式,将交给TestFilter去过滤

    我们在项目中添加一个admin文件夹,然后在其中放一个admin.jsp:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
           这里是管理员页面!
    </body>
    </html>

    然后启动tomcat访问admin.jsp

    使用http://localhost:8080/FilterTest/admin/admin.jsp    (其中FilterTest是项目名称)

    然后会显示如下:  


    因为代码中if(false)的判断,所以filter并不生效

    将if(false)修改成if(true),在重启tomcat,效果如下:


    Filter生效了,返回错误信息:无管理员权限访问!





  • 相关阅读:
    Mousejack Hacking : 如何利用MouseJack进行物理攻击
    美国总统大选,黑客组织“匿名者”(Anonymous)也来凑热闹
    移动终端iframe的旋屏
    sql 语句和 mongodb 语句对应表
    [转] 两个viewport的故事
    单机斗地主
    websokcet压力测试工具
    python处理网络文字流,设置为utf8编码
    mysql常用命令
    redis学习资料
  • 原文地址:https://www.cnblogs.com/kevinWu7/p/10163490.html
Copyright © 2020-2023  润新知