最近接触到OncePerRequestFilter,大概总结下:
1、OncePerRequestFilter保证一个filter只会过滤一次。
/** * This {@code doFilter} implementation stores a request attribute for * "already filtered", proceeding without filtering again if the * attribute is already there. 这个{@code doFilter}实现存储了“已经过滤”的请求属性,如果该属性已经存在则继续进行而不再过滤。 * @see #getAlreadyFilteredAttributeName * @see #shouldNotFilter * @see #doFilterInternal */
@Override public final void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws ServletException, IOException { if (!(request instanceof HttpServletRequest) || !(response instanceof HttpServletResponse)) { throw new ServletException("OncePerRequestFilter just supports HTTP requests"); } HttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletResponse httpResponse = (Ht