什么是过滤器?
过滤器:可以把某些东西给过滤/筛选/排除掉的存在。 程序中的过滤器:在java中最小的单元就是类,程序中的过滤器就是一个特殊的类(实现了某个接口(Filter...)),目的是用来拦截资源数据和目的数据之间的信息,以达到两者 之间的数据的过滤筛选作用。
过滤器可以对所有的请求或者响应做拦截操作(过滤器是属于服务端的内容)
①:以常规的方式调用资源(Servlet/JSP)
②:利用修改过的请求信息调用资源
③:调用资源之后,但在响应到客户端之前,对响应做出修改
④:阻止当前资源调用,代之转到其他资源
在web.xml中配置Filter
<Filter>
<filter-name>xxxFilter</filter-name>
<filter-class>Filter类的全限定名</filter-class>
</Filter>
<filter-mapping>
<filter-name>xxxFilter</filter-name>
<url-pattern>/xxx</url-pattern>
</filter-mapping>
<filter-name>:filter的别名
<filter-class>:filter类的全限定名
<filter-mapping>:filter的映射
<url-pattern>:访问该过滤器的名称
过滤器是在项目启动的时候初始化 --> init()
过滤器是在项目关闭的时候销毁 --> destroy()
当用户访问的资源匹配url-pattern的时候,执行过滤的方法 --> doFilter()------FilterChain中的doFilter()方法是将请求继续发送
当访问的资源和过滤器配置不匹配时,过滤器无效
FilterChain(过滤器链):多个过滤器按照一定的顺序,排列起来.
------------------------------------------------------------------
程序中,存在多个过滤器的时候,过滤器的先后执行顺序由谁来决定.
由在web.xml中:配置的<filter-mapping>的先后顺序来决定,也就是由注册的先后顺序来决定。
注解配置时则是由Filter的名称来决定先后顺序(扯淡,这个貌似不起作用)
注意:此时的url-pattern的文本内容是Filter对哪一些资源做过滤操作.
如:
/common/index.html :说明当前Filter只会对common/index.html做拦截/过滤.
/hello.jsp :说明当前Filter只会对/hello.jsp做拦截/过滤.
/employee :说明当前Filter只会对/employee资源做过滤.
/system/* :说明当前Filter只会对以/system/作为前缀的资源路径做拦截.
过滤器的分类应用
认证过滤:对用户请求进行统一的认证
编码过滤:对数据进行编码和解码方式进行过滤
登录和审核过滤:对用户的访问进行记录和审核
图像转换过滤:转换图像格式
数据压缩过滤:对用户发送的数据进行压缩
加密过滤:对请求和响应进行加密和解密处理
令牌过滤:防止重复提交和改写参数