public static ResponseFilter newInstance(SecurityResponseFilter... filters) { return newInstance(Arrays.asList(filters)); }
public static ResponseFilter newInstance(List<? extends SecurityResponseFilter> filters) { return new SecurityResponseFilterChain(filters); }
@Override public void filter(Response response, Request request) { if(response instanceof HttpResponse) { DiscFilterResponse discFilterResponse = new JdiscFilterResponse((HttpResponse)response); RequestView requestView = new RequestViewImpl(request); filter(requestView, discFilterResponse); } }
@Override public void invokeResponseFilterChain( ResponseFilter responseFilterChain, URI uri, HttpServletRequest request, HttpServletResponse response) { SecurityResponseFilterChain securityChain = cast(SecurityResponseFilterChain.class, responseFilterChain). orElseThrow(SecurityFilterInvoker::newUnsupportedOperationException); ServletFilterResponse wrappedResponse = new ServletFilterResponse(new ServletResponse(response)); securityChain.filter(new ServletRequestView(uri, request), wrappedResponse); }
@SuppressWarnings("unchecked") private static Object createSecurityChain(List<?> filters) { Object head = filters.get(0); if (head instanceof SecurityRequestFilter) return SecurityRequestFilterChain.newInstance((List<SecurityRequestFilter>) filters); else if (head instanceof SecurityResponseFilter) return SecurityResponseFilterChain.newInstance((List<SecurityResponseFilter>) filters); throw new IllegalArgumentException("Unexpected class " + head.getClass()); }