首页 > 编程知识 正文

javaweb过滤器和拦截器,java怎么使用过滤器进行拦截

时间:2023-05-03 22:25:33 阅读:17157 作者:1151

本文介绍了如何在springboot中实现过滤器和拦截器(代码)。 可以作为参考,需要的人请参考。 希望能帮上忙。

过滤器和拦截器都是AOP编程思想的引出,可以实现权限检查、日志记录等。 两者有一定的相似之处,不同之处在于,Filter是servlet规范,只能在Web程序中使用,拦截器是Spring规范,可以在Web程序中使用,也可以在APP中使用。

过滤器由servlet定义,并依赖于servlet容器。 拦截器由Spring定义,依赖于Spring容器。

拦截器是Spring组件,由Spring管理并放置在Spring配置文件中,因此可以使用任何Spring资源。 例如,Service和数据源等可以通过IOC容器注入拦截器,但Filter不会。

过滤器只能在servlet之前和之后工作,但拦截器会深入到方法之前和之后,并且会例外地向前和向后抛出。 使用深度更大。

用Spring实现过滤器

如何使用springboot提供的过滤器注册自定义过滤器

publicclassmyfilterimplementsfilter {

@Override

公共void init (过滤器配置文件配置) throws ServletException {

system.out.println (myfilter init . );

}

@Override

publicvoiddofilter (servletrequestservletrequest,ServletResponse servletResponse,过滤器通道过滤器通道) throws IOException

//站点图标/favicon.ico过滤器将运行两次

http servlet请求=(http servlet请求) servlet请求;

系统. out.println (request.getrequest uri () );

system.out.println (myfilterdofilter…);

filter chain.do filter (servlet请求,servlet响应;

}

@Override

公共语音目录

}

}

在springboot中注册过滤器

@Configuration

公共类过滤器配置{

@Bean

publicfilterregistrationbeanregistrationbean (

filterregistrationbeanmyfilter=newfilterregistrationbean (new myfilter ();

myfilter.addURLpatterns('/* ';

返回过滤器;

}

demo运行到此为止时,您会看到do filter运行了两次。 调试程序发现这是因为在浏览器请求时管理了站点图标,可以在uri中找到。 可以根据自己的需要用正则表达式进行适当的控制。

方法2:servlet注释定义文件

@Component

@ web过滤器(filtername=' myfilter2',urlPatterns='/* ' )

公共类myfilter 2实施过滤器{

@Override

公共void init (过滤器配置文件配置) throws ServletException {

system.out.println (myfilter2init . );

}

@Override

publicvoiddofilter (servletrequestservletrequest,ServletResponse servletResponse,过滤器通道过滤器通道) throws IOException

system.out.println (myfilter2do filter…);

filter chain.do filter (servlet请求,servlet响应;

}

@Override

公共语音目录

}

}

使用servleta注释声明的过滤器在运行时只需要一次。 这与使用spring构成过滤器不同。

用Spring实现窃听器

拦截器主要使用定制类集成handler拦截器。 程序持续关闭,直到preHandle返回true,如果返回false,则中断请求。

publicclassmyinterceptorimplementshandlerinterceptor {

@Override

publicbooleanprehandle (httpservletrequestrequest,HttpServletResponse response,对象处理程序) throws Exception {

system.out.println(/preHandler );

返回真;

}

@Override

publicvoidposthandle (httpservletrequestrequest,http servlet响应响应,对象处理程序,@ nullablemodelandviewmodelandler

throws Exception {

system.out.println (后处理程序);

}

@Override

publicvoidaftercompletion (httpservletrequestrequest,http servlet响应响应,对象处理程序,@Nullable Exception ex )

system.out.println (after completion );

}

}

在程序中配置拦截器并声明拦截器规则

@Configuration

publicclassinterceptorconfigimplementswebmvcconfigurer {

@Override

publicvoidaddinterceptors (interceptorregistryregistry ) {

registry.add interceptor (newmyinterceptor () ) ).addpathpatterns ) (/* );

}

}

执行结果

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。