Servlets Servlet筛选器:是否存在`doFilter(HttpServletRequest)`
servlet API定义了一个Servlets Servlet筛选器:是否存在`doFilter(HttpServletRequest)`,servlets,jakarta-ee,servlet-filters,Servlets,Jakarta Ee,Servlet Filters,servlet API定义了一个GenericServlet,它接受ServletRequest对象,并将其子类化为HttpServlet,它接受HttpServletRequest。但是,Filter.doFilter似乎只接受ServletRequest。是否存在特定于HTTP请求的筛选器类?如果不是 为什么??既然HTTP是所有web组件的唯一通用方法,那么像Servlet一样使用HTTP特定的过滤器是否有意义呢?理由是什么 如何将ServletRequest传递给HttpServlet
GenericServlet
,它接受ServletRequest
对象,并将其子类化为HttpServlet
,它接受HttpServletRequest
。但是,Filter.doFilter
似乎只接受ServletRequest
。是否存在特定于HTTP请求的筛选器类?如果不是
- 为什么??既然HTTP是所有web组件的唯一通用方法,那么像Servlet一样使用HTTP特定的过滤器是否有意义呢?理由是什么
- 如何将
传递给ServletRequest
?我必须手动将其降级,还是有更合适的方法HttpServletRequestWrapper
- 你不是唯一一个长久以来都希望如此的人。这实际上没有合理的理由。因此,即将发布的Servlet4.0(JavaEE8的一部分)最终将附带一个
javax.Servlet.http.HttpFilter
。它目前已经在运行中。方法签名为:
protected void doFilter(HttpServletRequest request,
HttpServletResponse response,
FilterChain chain)
在此之前,您最好自己烘焙一个HttpFilter
,或者如果您碰巧使用了基于JSF+CDI的web应用程序,则可以使用grab(也就是说,您可以将其作为自己烘焙的灵感),它恰好具有以下特征:
public void doFilter(HttpServletRequest request,
HttpServletResponse response,
HttpSession session,
FilterChain chain)
如果尚未创建,会话
则为null
至于你的第二个问题
如何将ServletRequest
传递给HttpServletRequestWrapper
?我必须手动将其降级,还是有更合适的方法
只需在这里查看几个真实世界的示例。相关: