Filter
Posted ascto
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Filter相关的知识,希望对你有一定的参考价值。
Filter
什么是Filter过滤器
1.Filter过滤器它是JavaWeb的三大组件之一,三大组件分别是:Servlet程序、Listener监听器、Filter过滤器
2.Filter过滤器它是JavaEE规范,也就是接口。
3.它的作用是:拦截请求,过滤响应。
拦截请求常见的应用场景:
1.权限检查
2.日记操作
3.事务管理
Filter的初体验
要求在你的web工程下,有一个admin目录。这个admin目录下的所有资源(html页面,jpg图片,jsp文件等)都必须是用户登录之后才允许访问。
思考:根据之前我们学过内容,我们知道,用户登录之后都会把用户登录信息保存到session域中,所以要检查用户是否登录,可以判断session中是否包含有用户登录的信息即可。
/*专门用于拦截请求,过滤响应。可以做权限检查*/
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException
HttpServletRequest httpServletRequest=(HttpServletRequest)servletRequest;
HttpSession session=httpServletRequest.getSession();
Object user=session.getAttribute("user");
if (user==null)
servletRequest.getRequestDispatcher("/login.jsp").forward(servletRequest,servletResponse);
return;
else
/*让程序继续往下访问目标资源*/
filterChain.doFilter(servletRequest,servletResponse);
<!--filter标签用于配置一个filter过滤器-->
<filter>
<!--取别名-->
<filter-name>AdminFilter</filter-name>
<!--配置filter的全类名-->
<filter-class>filter.AdminFilter</filter-class>
</filter>
<!--配置Filter过滤器的拦截路径-->
<filter-mapping>
<!--表示当前的拦截路径给哪个filter使用-->
<filter-name>AdminFilter</filter-name>
<!--配置拦截路径
/ 表示请求地址为 :http://ip:port/工程路径/ 映射到web目录
/admin/*表示请求地址为http://ip:port/工程路径/admin/*
-->
<url-pattern>/admin/*</url-pattern>
</filter-mapping>
Filter过滤器的使用步骤:
1.编写一个类去实现Filter接口。
2.实现过滤方法doFilter()
3.到web.xml中去配置Filter的拦截路径
Filter的生命周期
filter的生命周期包含几个方法
1.构造器方法
2.init初始化方法
第一二步在web工程启动时执行(Filter已经创建)
3.doFilter过滤方法
第三步,每次拦截到请求,就会执行
4.destroy销毁
第四步,停止web工程的时候,就会执行(停止web工程也会销毁filter过滤器)
FilterConfig类
FilterConfig类,它是Filter过滤器的配置文件类
Tomcat每次创建Filter的时候,也会去创建一个FilterConfig类。这里包含了Filter配置文件的配置信息。
FilterConfig的作用是:获取Filter过滤器的配置内容
1.获取Filter的名称filter-name的内容
2.获取在Filter中配置的init-param初始化参数
3.获取ServletContext对象
@Override
public void init(FilterConfig filterConfig) throws ServletException
// 1.获取Filter的名称filter-name的内容
System.out.println("filter-name的值是:"+filterConfig.getFilterName());
// 2.获取在Filter中配置的init-param初始化参数
System.out.println("初始化参数username的值为"+filterConfig.getInitParameter("username"));
System.out.println("初始化参数url的值为"+filterConfig.getInitParameter("url"));
// 3.获取ServletContext对象
System.out.println(filterConfig.getServletContext());
System.out.println("2.Filter的init初始化方法");
控制台结果:
FilterChain过滤器链
Filter:过滤器
Chain:链
FilterChain,就是过滤器链(多个过滤器如何一起工作)
Filter的拦截路径
精准匹配
<url-pattern> /target.jsp</url-pattern>
以上配置的路径,表示请求地址必须为:http://ip:port/工程路径/target.jsp
目录匹配
<url-pattern> /admin/*</url-pattern>
以上配置的路径,表示请求地址必须为:http://ip:port/工程路径/admin/*
后缀名匹配
<url-pattern>*.html</url-pattern>
以上路径配置,表示请求地址必须以.html结尾才会拦截到
/admin/*`
以上配置的路径,表示请求地址必须为:http://ip:port/工程路径/admin/*
后缀名匹配
<url-pattern>*.html</url-pattern>
以上路径配置,表示请求地址必须以.html结尾才会拦截到
Filter过滤器只关心请求的地址是否匹配,不管资源是否存在!
以上是关于Filter的主要内容,如果未能解决你的问题,请参考以下文章