来自 的 javadoc:HandlerIntercepter
HandlerInterceptor
基本上类似于 Servlet ,但与后者相比,它只是允许自定义预处理,可以选择禁止执行处理程序本身,以及自定义后处理。过滤器更强大,例如,它们允许交换在链中传递的请求和响应对象。请注意,过滤器是在 应用程序上下文中的 a 中配置的。Filter
web.xml
HandlerInterceptor
作为基本准则,与处理程序相关的细粒度预处理任务是实现的候选项,尤其是分解的常见处理程序代码和授权检查。另一方面,a 非常适合请求内容和视图内容处理,如多部分表单和 GZIP 压缩。这通常显示何时需要将筛选器映射到某些内容类型(例如图像)或所有请求。
HandlerInterceptor
Filter
话虽如此:
那么 和 之间的区别在哪里呢?
Interceptor#postHandle()
Filter#doFilter()
postHandle
将在处理程序方法调用之后但在呈现视图之前调用。因此,您可以向视图中添加更多模型对象,但不能更改,因为它已经提交。HttpServletResponse
doFilter
比 .您可以更改请求或响应并将其传递给链,甚至阻止请求处理。postHandle
此外,在 和 方法中,您可以访问处理请求的 。因此,您可以根据处理程序本身添加预处理/后处理逻辑。例如,可以为具有一些批注的处理程序方法添加逻辑。preHandle
postHandle
HandlerMethod
在哪些用例中应该使用它的最佳实践是什么?
正如文档所说,与处理程序相关的细粒度预处理任务是实现的候选对象,尤其是分解的常见处理程序代码和授权检查。另一方面,a 非常适合请求内容和视图内容处理,如多部分表单和 GZIP 压缩。这通常显示何时需要将筛选器映射到某些内容类型(例如图像)或所有请求。HandlerInterceptor
Filter
过滤器: - 顾名思义,过滤器是由 servlet 容器为每个传入的 HTTP 请求和每个 HTTP 响应执行的 Java 类。这种方式可以在HTTP传入请求到达资源之前对其进行管理,例如JSP页面,servlet或简单的静态页面;同样,可以在资源执行后管理 HTTP 出站响应。
Interceptor: - Spring Interceptors类似于Servlet Filters,但它们在Spring上下文中起作用,因此可以管理HTTP请求和响应,但它们可以实现更复杂的行为,因为它们可以访问所有Spring上下文。
-
如何使用Java中的RESTful Web服务获取远程/客户端IP地址? 我已经在我的项目中编写了Rest Web服务。Web服务调用可能来自不同 machine.so 我需要通过REST Web服务找出IP地址。 从这个请求.getRemoteAddr()使用这个。 但是我不能使用getRemoteAddr()。因为我的请
-
从包含大量文件的zip文件中提取1文件的最快方法是什么? 我尝试了但它们也缺少一些东西。 LZMA SDK不提供一种如何使用的文档/教程,这非常令人沮丧。没有 javadoc。 虽然7z jbinding没有提供一种简单的方法来只提取1个文件,但是,它只提供了提取zip文件
-
输入/输出流在销毁时是否关闭? Java 中的 InputStreams 和 OutputStreams 是否在销毁时关闭()?我完全理解这可能是不好的形式(特别是在C和C++世界中),但我很好奇。 另外,假设我有以下代码: 无名的FileInputStream是否在p.load
-
Java 程序中的字符串大小是否有任何限制? 我有一个字符串定义为 字符串 xx 我可以分配的字符数是否有任何限制? 2) 我正在将用户输入分配给此字符串 xx。70%的人只说一个字。有时他们给出一个大句子,所以想知道可
-