┌──────────────────────────────────────────────────────────────────────────────────────────┐ │Filter │ ├──────────────────────────────────────────────────────────────────────────────────────────┤ │+ {abstract} init(FilterConfig filterConfig) │ │+ {abstract} doFilter(ServletRequest request, ServletResponse response, FilterChain chain)│ │+ {abstract} destroy() │ └──────────────────────────────────────────────────────────────────────────────────────────┘ | | ┌───────────────────┐ │GenericFilterBean │ ├───────────────────┤ │+ init() │ │+ doFilter() │ │+ destroy() │ └───────────────────┘ | ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │OncePerRequestFilter │ ├────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │+ {abstract} doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)│ └────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ ┌────────────────────┐ ┌────────────────────┐ │MyFilter1 │ │MyFilter2 │ ├────────────────────┤ ├────────────────────┤ │+ doFilterInternal()│ │+ doFilterInternal()│ └────────────────────┘ └────────────────────┘