Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 拦截器或过滤器_Spring_Spring Mvc_Servlet Filters_Interceptor - Fatal编程技术网

Spring 拦截器或过滤器

Spring 拦截器或过滤器,spring,spring-mvc,servlet-filters,interceptor,Spring,Spring Mvc,Servlet Filters,Interceptor,我正在开发一个Spring应用程序,我想做一些安全检查,比如MD5文件检查、DB检查、应用程序版本检查等 我读过关于拦截器和过滤器的书,但对于哪一个好用还是有点困惑 无论我读过什么文档,都指定过滤器和拦截器都可以用于日志记录和审计,所以哪一个适合这个场景。 此外,所有这些安全检查(MD5文件检查、DB检查、应用程序版本检查)都可以配置,这意味着DB检查是允许的,应用程序版本检查也是允许的。在我看来,过滤器和拦截器之间最大的区别之一是: 过滤器只在J2EE web应用程序中工作,不能在应用服务器之

我正在开发一个Spring应用程序,我想做一些安全检查,比如MD5文件检查、DB检查、应用程序版本检查等

我读过关于拦截器和过滤器的书,但对于哪一个好用还是有点困惑

无论我读过什么文档,都指定过滤器和拦截器都可以用于日志记录和审计,所以哪一个适合这个场景。
此外,所有这些安全检查(MD5文件检查、DB检查、应用程序版本检查)都可以配置,这意味着DB检查是允许的,应用程序版本检查也是允许的。

在我看来,过滤器和拦截器之间最大的区别之一是:

过滤器只在J2EE web应用程序中工作,不能在应用服务器之外使用,拦截器可以在不同的组件中工作,不依赖于web层,总之拦截器比过滤器有更广泛的应用领域。 如果计划将某些组件移到容器之外,则应该考虑使用拦截器。

过滤器更多地在请求/响应域中工作,而拦截器更多地在方法执行域中工作

如果您需要做一些可能会影响应用程序的请求或响应的事情,例如日志记录、安全性、审核,或者您会影响应用程序上的数据,那么您可以选择筛选,不要忘记它们提供的插件功能

拦截器与JavaEE管理的类一起使用,以 允许开发人员在相关目标上调用拦截器方法 类,与方法调用或生命周期事件结合使用


虽然我想和大家分享一下我的看法,但我回答晚了

过滤器仅在web层中使用,因为它是在web.xml中定义的。我们不能脱离网络环境使用它。而Spring拦截器可以在任何地方使用,因为它是在应用程序上下文中定义的

考虑到上述差异,对于登录身份验证和审核来自web页面的传入请求,我们应该使用servlet过滤器。为了实现您的业务层日志记录和审计以及许多其他功能,我们应该使用拦截器

除此之外,如果您使用的是SpringMVC。然后,您希望将过滤或拦截的所有逻辑保留在一个框架中,而不是在servlet过滤器中编写一些逻辑,在spring中编写其他逻辑


Spring在完成之前和之后的方法之外,还提供了一个额外的控制点

感谢您的快速回复,我可能错了,但根据您的句子,过滤器在web层工作,拦截器可以在任何地方使用,对吗?过滤器是一个web组件,另一方面,拦截器可以在一个目标类中定义为拦截器方法,或者在一个称为拦截器类的关联类中定义,并且可以在任何地方使用,这取决于框架,如果您使用的是javax.interceptor widelyOk,我现在知道了。我将使用拦截器,但我不打算将任何组件移出容器外,因为我还不清楚从容器中取出什么。我将使用拦截器,因为如果任何安全检查get失败,那么我可以更改ModelAndView,这可以使用拦截器完成。是否正确?是的,您可以在拦截器的处理程序方法中使用springMVC拦截器和trycatch异常,但这也可以使用筛选器XD来完成,这里的另一个区别是筛选器不由spring容器管理,因此您将丢失的自动连线选项复制