过滤器filter他的理解是:
filter是对客户端访问资源的过滤,符合条件放行,不符合条件的不放行,并且可以对目标资源访问的前后进行逻辑处理。
快速入门:
1、编写一个过滤器的类实现filter接口。
2、实现接口中尚未实现的方法(着重实现dofilter方法)
3、在web.xml进行配置(主要是配置要对的那些资源进行过滤)
(实际就是放过哪一个,不放过哪一个的判断操作)。
进行拦截的先关fliter的操作:
public class FilterDemo1 implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } // doFilter业务处理的核心代码区,相当于Servlet的service方法 @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("FilterDemo1----------------------"); } @Override public void destroy() {
对于其中的方法:
- init:服务器启动后创建Filter对象,调用init方法,init方法只执行一次,一般用来加载资源
- doFilter:每次请求被拦截的资源时都会执行,可以执行多次
- destroy:服务器关闭后Filter对象被销毁,如果服务器是正常关闭,就会执行destroy方法
主要是重写dofilter
之后就是对其进行放行:
public class FilterDemo1 implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } // doFilter业务处理的核心代码区,相当于Servlet的service方法 @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("FilterDemo1----------------------"); Chain.doFilter(servletRequest, servletResponse);// 过滤器放行请求,可以访问到index.jsp } @Override public void destroy() {
主要是通过chain进行对其放行。
然后就是对于web的相应的配置:
<filter> <filter-name>demo1</filter-name> <filter-class>cn.zhuobo.web.filter.FilterDemo1</filter-class> </filter> <filter-mapping> <filter-name>demo1</filter-name> <url-pattern>/*</url-pattern> <!-- 这里配置的是拦截路径 --> </filter-mapping>
哪里的/*是对所有的进行拦截操作。
- 拦截具体资源:index.jsp,表示只有访问该资源时对应的过滤器才会被执行
- 拦截目录:/dir/*,表示访问dir目录下的所有资源过滤器都会被执行
- 拦截后缀名:*.jsp,表示访问jsp资源时过滤器会被执行
- 拦截全部资源:/*,表示访问所有资源都会执行过滤器
原文地址:https://www.cnblogs.com/dazhi151/p/12398218.html
时间: 2024-10-11 15:47:33