/** * Determines the return location and redirects based on federation termination Return URL of the * provider that sent the termination request. */ private void returnToSource() { FSUtils.debug.message("Entered FSFedTerminationHandler::returnToSource"); try { StringBuffer finalReturnURL = new StringBuffer(); String retURL = remoteDescriptor.getFederationTerminationServiceReturnURL(); if (FSUtils.debug.messageEnabled()) { FSUtils.debug.message("Redirecting to : " + retURL); } resetFederateCookie(); FSUtils.debug.message("Checking retURL for null value"); if (retURL == null || retURL.length() < 1) { FSUtils.debug.error("Return URL is null"); FSServiceUtils.showErrorPage( response, error_page_url, IFSConstants.TERMINATION_INVALID_REDIRECT_URL, IFSConstants.METADATA_ERROR); return; } else { finalReturnURL.append(retURL); if (!(relayState == null || relayState.length() < 1)) { char delimiter; if (retURL.indexOf(IFSConstants.QUESTION_MARK) < 0) { delimiter = IFSConstants.QUESTION_MARK; } else { delimiter = IFSConstants.AMPERSAND; } finalReturnURL .append(delimiter) .append(RELAY_STATE) .append(IFSConstants.EQUAL_TO) .append(URLEncDec.encode(relayState)); } if (FSUtils.debug.messageEnabled()) { FSUtils.debug.message("Now sendRedirecting to : " + finalReturnURL.toString()); } response.sendRedirect(finalReturnURL.toString()); return; } } catch (IOException e) { FSUtils.debug.error( "Unable to get LRURL. No location to redirect." + " processing completed", e); } // create new bundle entry for redirect failure FSUtils.debug.message("After exception calling response.sendError"); FSServiceUtils.showErrorPage( response, error_page_url, IFSConstants.TERMINATION_INVALID_REDIRECT_URL, IFSConstants.METADATA_ERROR); return; }