当前位置:首页 > Web开发 > 正文

如果多个Filter拦截规则都能匹配到某个请求的访问路径

2024-03-31 Web开发

WEB中的三大组件
Servlet
Filter
Listener
Filter*****
过滤器
观点:
过滤器是web中的一个组件,可以用于过滤请求。在处事器方针资源之前优先拦截到请求,对其进行措置惩罚惩罚,可以放行该请求也可以直接拦截失。
如果请求被放行,那么该请求的响应也会被过滤器拦截。
感化:
可以完成一系列通用的操纵。
编写流程
1. 编写一个类实现Filter接口
2. 实现接口中的要领,重点是doFilter要领
在doFilter要领中,可以挪用chain.doFilter实现请求的放行
3. 通过配置奉告tomcat处事器Filter的信息
全类名
拦截路径
只要访谒的资源路径切合拦截路径的法则,那么该请求就优先被过滤器拦截到
1. 完全路径匹配
2. 目录匹配
3. 扩展名匹配
注意:
Filter的url-pattern配置没有优先级的法则。如果多个Filter拦截法则都能匹配到某个请求的访谒路径。
这些Filter都能拦截到此次请求,它们会凭据某种法则构成一条过滤器链。
在web.xml中配置

demo1
cn.itcast.web.filter.FilterDemo1


demo1
/*

使用注解配置
@WebFilter
配置请求方法
设置dispatcherTypes属性 分发类型
1. REQUEST:默认值。浏览器直接请求资源
2. FORWARD:转发访谒资源

FilterChain
过滤器链
构成
如果多个Filter拦截法则都能匹配到某个请求的访谒路径。这些Filter都能拦截到此次请求,它们会凭据某种法则构成一条过滤器链。
法则:
1. 如果Filter是使用注解配置,,在链中的挨次和类名的字符串挨次一致。
2. 如果Filter是使用web.xml配置,在链中的挨次和filter-mapping标签配置的挨次一致
执行流程
挪用chain.doFilter()时,内部实际进行了判断,判断当前过滤器链中是否有下一个过滤器节点。
如果有,则挪用其doFilter要领。
如果没有,则放行到方针资源位置。
在一个过滤器链中,只有所有的过滤器都执行了chain.doFilter,那么此次请求才华访谒到方针资源。
只要有一个过滤器拦截住没有放行,那么整条过滤器链相当于就没有放行。
登录验证案例
1. 挑选出可以直接放行的资源---登录相关的资源。
2. 使用Filter,拦截所有请求,判断是否登录。
3. 用户是否处于登录状态,是由session中是否存储了user信息决定的。
动态代办代理*****
在不改削一个类的源码的根本上,动态的改削其要领的执行逻辑。
增强一个类中的要领
1. 担任 前提:方针东西必需是我们本身控制创建的。
2. 装饰者模式
new BufferedReader(new InputStreamReader(new FileInputStream("C://xxx")));
3. 动态代办代理
代办代理:取代你去措置惩罚惩罚一些逻辑。
动态代办代理:通过api,动态的在运行期生成一个类的东西,作为代办代理东西使用。
基于JDK的动态代办代理的法则:我们的被代办代理东西要实现接口。
代办代理东西 = Proxy.newProxyInstance()
Proxy.newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h)
参数:
ClassLoader:被代办代理东西的类加载器
固定写法:被代办代理东西.getClass().getClassLoader()
Class<?>[]: 被代办代理东西实现的所有接口对应的字节码东西
固定写法:被代办代理东西.getClass().getInterfaces()
InvocationHandler:挪用的措置惩罚惩罚器接口,用于指定代办代理东西中的所有要领的执行逻辑的。
Object invoke(Object proxy, Method method, Object[] args)---今世办代理东西的要领被挪用时,实际执行的是该要领。该要领的返回值会返回到代办代理东西挪用要领处。
参数:
proxy:代办代理东西,其实就是Proxy.newProxyInstance要领的返回值,一般不会使用
method:代办代理东西执行要领时,执行哪个东西,该method就是哪个东西对应的Method东西。
args:代办代理东西执行要领时,传入的实际参数。

Listener**
监听器
当某个具体的事件产生时,可以执行提前设定好的一段逻辑。监听器封装了这些逻辑。
ServletContextListener
监听ServletContext东西的创建和销毁的监听器。
监听此东西相当于监听了处事器的启动和封锁。
编写流程
写一个类实现ServletContextListener接口
实现接口中的要领
创建
销毁
在web.xml中进行配置


全局初始化参数
在web.xml中,使用context-param标签可以指定key-value键值对的参数,使用ServletContext东西就可以使用key来获取这些参数。

key
value

String value = servletContext.getInitParameter("key");

在web.xml中,在servlet或filter标签下,也可以使用init-param指定key-value键值对的参数 <init-param> <param-name>key</param-name> <param-value>value</param-value> </init-param> 如果在Filter中,可以使用filterConfig.getInitParameter("key")获取指定的值 如果在Servlet中,可以使用this.getServletConfig().getInitParameter("key")获取指定的值

Web核心之Filter过滤器

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/32749.html