Java过滤器—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生效了,返回错误信息:无管理员权限访问!
Java过滤器—Filter用法简介的更多相关文章
- java assert的用法简介【转】
		assert的基本用法 assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制,如C,C++和Eiffel等,但是支持的形式不尽相同,有的是通过语言本身.有的是通过库 ... 
- java 过滤器(Filter)与springMVC 拦截器(interceptor)的实现案例
		java 过滤器Filter: package com.sun.test.aircraft.filter;import javax.servlet.*;import java.io.IOExcepti ... 
- java过滤器Filter笔记
		一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术之一,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp,Servlet, 静 ... 
- Servlet中的过滤器Filter用法
		1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ,它不能处理用户请求,也不能对客户端生成响应. 主要用于对HttpServletRequest 进行预处理,也可以对Http ... 
- Java过滤器Filter
		过滤器 一. 简介 过滤器一般用于设置字符编码.登录验证.权限验证.敏感词过滤等,减少了代码的冗余,便于代码的复用,但是不一定是每个servlet都必须使用过滤器的. 二. 过滤器的工作流程 图片来源 ... 
- Servlet过滤器Filter用法
		1 Servlet 过滤器方法 过滤器是一个实现了 javax.servlet.Filter 接口的 Java 类.javax.servlet.Filter 接口定义了三个方法:public void ... 
- java 过滤器Filter中chain.doFilter()之前和之后代码的执行顺序
		过滤器拦截到响应url的请求后会先执行doFilter()方法中chain.doFilter()之前的代码,然后执行下一个过滤器或者servelt.紧接着执行chain.doFilter()之后的代码 ... 
- XSS过滤JAVA过滤器filter 防止常见SQL注入
		Java项目中XSS过滤器的使用方法. 简单介绍: XSS : 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩 ... 
- java过滤器filter使用
		一:filter:过滤器,拦截servlet的请求和响应. 1. package jd.com.filter; import javax.servlet.*; import java.io.IOExc ... 
随机推荐
- [记]Windows 系统下设置Nodejs NPM全局路径
			Windows下的Nodejs npm路径是appdata,担心安装的node_modules越来越多,导致C盘满,所以参考别人的博文,将node_modules安装的默认目录修改一下. 参考Wind ... 
- 使用pageHelper分页查询,报sql语句错误
			1.异常详情: 2.异常分析: (1)pageHelper分页大致流程: 配置默认的拦截器:pagehelper.PageInterceptor,对发送的查询语句进行拦截,拦截之后对原有的查询语句进 ... 
- JavaSE_11_File类、递归
			1.1 概述File类 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 1.2 构造方法 public File(String pathname ... 
- 查看pip install *.whl 支持的文件版本
			import pip._internalprint(pip._internal.pep425tags.get_supported())[('cp37', 'cp37m', 'manylinux2010 ... 
- Python2.7版本:定义类时为什么要继承object类?
			********此答案摘自知乎,且经过自己实际运行后得出******** 继承 object 类的是新式类,不继承 object 类的是经典类 例子: 新式类: 经典类: B.C 是 A 的子类,D ... 
- UVA--624 CD(01背包+路径输出)
			题目http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ... 
- PIL的ImageDraw的颜色问题
			因为我的图片的单通道的,所以用 draw = ImageDraw.Draw(image) im_width, im_height =], info[], info[], info[]) color=d ... 
- JS 日期比较
			Js 日期比较方法 第一种方式 function compareDate(s1,s2){ return ((new Date(s1.replace(/-/g,"\/")))> ... 
- Odoo models.py   BaseModel
			class BaseModel(object): """ Base class for OpenERP models. OpenERP models are create ... 
- 廖雪峰Java10加密与安全-2加密算法-1URL编码
			1.URL编码 URL编码是浏览器发送数据给服务器时使用的编码. 如通过百度搜索美女: 编码前:https://www.baidu.com/s?wd=美女 编码后:https://www.baidu. ... 
