servlet API定义GenericServlet
接受ServletRequest
个对象,并将其子类化为接受HttpServlet
的{{1}}。但是,HttpServletRequest
似乎只接受Filter.doFilter
。是否存在特定于HTTP请求的过滤器类?如果不是
ServletRequest
传递给ServletRequest
?我是否需要手动转发它,还是有更合适的方式?答案 0 :(得分:2)
你并不是唯一一个愿意这么久的人。实际上没有合理的理由。因此,即将到来的Servlet 4.0(Java EE 8的一部分)将根据spec issue 141最终得到javax.servlet.http.HttpFilter
。它目前已在implemented中Tomcat 9。方法签名是:
protected void doFilter(HttpServletRequest request,
HttpServletResponse response,
FilterChain chain)
在此之前,您最好的选择是亲自HttpFilter
,或者如果您碰巧使用基于JSF + CDI的Web应用程序,请抓住OmniFaces HttpFilter
(open source,这样您就可以了可以使用它作为自己烘焙的灵感),恰好有以下签名:
public void doFilter(HttpServletRequest request,
HttpServletResponse response,
HttpSession session,
FilterChain chain)
如果session
尚未创建,null
为ServletRequest
。
关于你的第二个问题,
我应该如何将
HttpServletRequestWrapper
传递给extension Array { func fun (_ iterator: (Int, Element) -> Void) -> Void { for (key,value) in self.enumerated() { iterator(key,value) } } }
?我是否必须手动转发它,还是有更合适的方式?
在这里查看existing code snippets几个真实世界的问题。