拦截器或过滤器

时间:2014-04-30 07:00:53

标签: spring spring-mvc servlet-filters interceptor

我正在开发一个Spring应用程序,我想在其中进行一些安全检查,例如MD5检查文件,数据库检查,应用程序版本检查等。

我已经阅读过有关拦截器和滤波器的内容,但仍然有点混淆哪一个很好用。

无论我阅读什么文档,都指定过滤器和拦截器都可以用于日志记录和审计,因此哪一个适合这种情况。 此外,所有这些安全检查(文件的MD5检查,数据库检查,应用程序版本检查)都可以配置为允许DB检查允许,同样允许应用程序版本检查。

2 个答案:

答案 0 :(得分:12)

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

过滤器只能在J2EE Web应用程序中运行,不能在应用程序服务器之外使用,拦截器可以在不同的组件中工作而不依赖于Web层,在摘要拦截器中有一个比过滤器宽的字段。 如果您计划在容器外部移动某些组件,则应考虑使用拦截器。

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

如果您需要做一些可能会影响您的应用程序的请求或响应的内容,例如日志记录,安全性,审核,或者您将影响其上的数据,您的选项是过滤,不要忘记插件这些提供的能力。

  

拦截器与Java EE托管类一起使用   允许开发人员在关联的目标上调用拦截器方法   class,与方法调用或生命周期事件一起使用

答案 1 :(得分:4)

我迟到了回答,虽然我想分享我对它的看法。

只有在web.xml中定义过滤器才会在Web层中使用过滤器。我们不能在网络环境中使用它。 Spring Interceptor可以在任何地方使用,因为它是在Application上下文中定义的。

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

除此之外,如果您使用的是Spring MVC。那么你想在一个框架中保留所有过滤或拦截的逻辑,而不是在servlet过滤器和其他逻辑中编写一些逻辑。

Spring除了方法之前和之后还提供了一个额外的控制点。

相关问题