public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest httpRequest; HttpServletResponse httpResponse; try { httpRequest = (HttpServletRequest) request; httpResponse = (HttpServletResponse) response; IAmFilter filter = getAmFilterInstance(httpRequest); AmFilterResult result = filter.isAccessAllowed(httpRequest, httpResponse); switch (result.getStatus().getIntValue()) { case AmFilterResultStatus.INT_STATUS_CONTINUE: allowRequestToContinue( httpRequest, httpResponse, filterChain, result); break; case AmFilterResultStatus.INT_STATUS_FORBIDDEN: httpResponse.sendError(HttpServletResponse.SC_FORBIDDEN); break; case AmFilterResultStatus.INT_STATUS_REDIRECT: httpResponse.sendRedirect(result.getRedirectURL()); break; case AmFilterResultStatus.INT_STATUS_SERVE_DATA: sendData(httpResponse, result); break; case AmFilterResultStatus.INT_STATUS_SERVER_ERROR: httpResponse.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); break; case AmFilterResultStatus.INT_STATUS_UNAUTHORIZED: httpResponse.sendError(HttpServletResponse.SC_UNAUTHORIZED); break; default: throw new AgentException( "Unknown filter result status: " + result.getStatus() + ":" + result.getStatus().getIntValue()); } } catch (Exception ex) { throw new ServletException("AmAgentFilter: An exception has occured", ex); } }
public void allowRequestToContinue( HttpServletRequest request, HttpServletResponse response, FilterChain filterChain, AmFilterResult result) throws IOException, ServletException { IHttpServletRequestHelper helper = result.getRequestHelper(); HttpServletRequest outgoingRequest = null; if (helper != null) { outgoingRequest = new AmAgentServletRequest(request, helper); } else { outgoingRequest = request; } boolean needProcessResponse = result.getProcessResponseFlag(); if (needProcessResponse) { OpenSSOHttpServletResponse outgoingResponse = new OpenSSOHttpServletResponse((HttpServletResponse) response); filterChain.doFilter(outgoingRequest, outgoingResponse); processResponse(outgoingRequest, outgoingResponse); } else { filterChain.doFilter(outgoingRequest, response); } }
protected void sendData(HttpServletResponse response, AmFilterResult result) throws IOException { PrintWriter out = null; try { response.setContentType("text/html"); out = response.getWriter(); String respContent = result.getDataToServe(); boolean needProcessResponse = result.getProcessResponseFlag(); if (needProcessResponse) { String processedRespContent = getWsResponseProcessor().process(result.getRequestURL(), respContent); out.print(processedRespContent); } else { out.print(respContent); } out.flush(); out.close(); } catch (IOException ex) { throw ex; } finally { if (out != null) { out.close(); } } }