Java三大组件之一Filter filter的实现原理示例说明
Filter
Servlet、过滤器、监听器被称为Java Web的三个组件。
Filter: 过滤器
当浏览器访问服务器资源并返回响应时,过滤器可以拦截请求并完成一些特殊功能。
用法:一般用于完成登录验证、统一编码处理、敏感字符过滤等一般操作。
1. Filter实现
定义一个类来实现过滤器接口。
覆盖方法
配置拦截路径
在网络INF中配置xml
使用注释来配置路径:@WebFilter(urlPatterns=)或@WebFilter(value=)或@WebFilter()
2. Filter原理
Filter执行流程
请求过滤:在发布的doFilter上执行代码
Release:执行doFilter,执行截取的资源。
响应:被拦截的资源做出响应后,它们会回来执行doFilter下的代码。
Filter生命周期
Init():初始化
服务器启动后,创建Filter对象并执行init方法。
只执行一次。通常用于加载资源。
DoFilter():请求过滤和响应过滤。
销毁(:)销毁
当服务器正常关闭时调用,通常用于释放资源。
过滤器拦截路径
块资源:/index.jsp,/loginServlet
只有在访问特定资源时,才会执行过滤器。
2.阻止目录:/用户/*
只有在访问/user下的资源时,才会执行该筛选器。
3.后缀截取:*.jsp (没有/)
4. 封锁所有资源:/*
过滤器的拦截方式:如何获取资源
备注:配置dispatcherType属性。
-REQUEST:默认值,资源只有在被浏览器直接访问时才会被阻止。
-在转发对此资源的访问时,FORWARD:被阻止。
-INCLUDE:仅当包含访问资源时才会被阻止。
-ASYNC:资源只有在异步访问时才会被拦截。
@ WebFilter(dispatcherType={ dispatcherType。请求,调度类型。FORWARD });
2.xml配置
拦截链
执行顺序:请求过滤按从小到大的顺序执行,响应顺序正好相反。
所有过滤器.(@WebFilter(/*))
你好过滤器.(@WebFilter(/hello.jsp))
你好,JSP(hello.jsp)
你好过滤回来.
所有过滤器
2.过滤器的顺序
*注意配置:-按字符串比较规则,从小到大。
例如,/*在/login.jsp之前执行。
-如果有重复,将从小到大执行。
例如,/*和/login.jsp都在请求login.js时执行过滤。
* web.xml配置:服务器上的任何人都将首先执行。
登录案例
-获取案例的资源。请确认它已登录。
-如果登录,将直接释放。
-如果您尚未登录,请跳转到登录页面,表示您尚未登录。请先登录。
@WebFilter(/*)
公共类LoginFilter实现了筛选器{ 0
@覆盖
public void init(FilterConfig config)引发了ServletException {
}
@覆盖
public void doFilter(servlet request请求,ServletResponse响应,FilterChain链)引发ServletException,IOException {
HttpServletrequest request 1=(HttpServletrequest)请求;
string uri=request 1 . GetRequesturi();
//注意:要过滤资源,否则不会显示样式、字体等登录的资源。
if(uri . contains(/log in . JSP)| | uri . contains(/loginServlet)| | uri . contains(/CSS/)| | uri . contains(/fonts/)| | uri . contains(/js/)| | uri . contains(//checkCodeServlet))
{
chain.doFilter(请求、响应);
} else {
字符串用户名=(字符串)request1.getSession()。getAttribute(用户名);
if(null!=用户名!等于(用户名))
{
chain.doFilter(请求、响应);
}else {
Request.setAttribute(loginMsg,您没有登录,请登录!);
request . getrequest dispatcher(/hello user/log in . JSP)。转发(请求、响应);
}
}
}
}
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/141435.html