2014-04-30 141 views
5

我上的Spring应用程序的工作中,我想要做一些安全检查如文件的MD5校验,DB检查,应用程序版本检查等拦截器或过滤器

我看了一下拦截器和过滤器,但仍然一有点混淆了哪一个很好用。

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

+0

复制方法(http://stackoverflow.com/questions/8000844/spring-handlerinterceptor-vs-servlet - 过滤器) – anre

回答

9

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

滤镜只能在J2EE Web应用程序,您不能使用应用程序服务器之外,拦截器可以在不同的组件协同工作,而不是依赖于网页层,总结拦截器比过滤器有一个广泛的领域。 如果您打算在容器外部移动某个组件,则应考虑使用拦截器。

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

如果您需要做一些可能会影响您的应用程序的请求或响应,例如日志记录,安全性,审计,或者您将影响到它们的数据,您的选择是过滤器,请不要忘记插件能力那些提供。

拦截器结合使用与Java EE管理类 允许开发人员需要调用相关的目标 类拦截方法,结合方法调用或生命周期事件

+0

感谢您的快速回复,我可能是错的,但根据您的句子过滤器在web层和拦截器的作品可以在任何地方使用,对吗? – Amogh

+0

Filter是一个Web组件,另一方面拦截器可以在目标类中定义为拦截器方法,或者在关联的类中定义为拦截器类,如果您使用的是某个拦截器,则可以在任何地方使用yes。一个,javax.interceptor广泛 – Koitoer

+0

好吧,我现在明白了。我会和拦截器一起去,但我不打算将任何组件移出容器外,因为它对于我来说还不清楚什么是从容器中取出的意思。我将使用拦截器,因为如果任何安全检查失败,那么我可以更改使用拦截器可以完成的ModelAndView。这是对的吗? – Amogh

3

我来不及回答虽然我想分享我对此的看法。

过滤器仅用于web层中,因为它在web.xml中定义。我们无法在Web上下文中使用它。虽然Spring Interceptor可以在任何地方使用,因为它是在Application上下文中定义的。

考虑到上述不同,对于来自网页的传入请求的登录验证和审计,我们应该使用servlet过滤器。虽然为了实现业务层日志记录和审计以及许多其他功能,我们应该使用Interceptor。

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

春天给另外一个额外的控制点afterCompletion执行之前和之后[VS Servlet过滤春天的HandlerInterceptor]的