protected String buildRedirectURL ( MessageContext < SAMLObject > messageContext , String endpoint , String message ) throws MessageEncodingException { log . debug ( "Building URL to redirect client to" ) ; URLBuilder urlBuilder ; try { urlBuilder = new URLBuilder ( endpoint ) ; } catch ( MalformedURLException e ) { throw new MessageEncodingException ( "Endpoint URL " + endpoint + " is not a valid URL" , e ) ; } List < Pair < String , String > > queryParams = urlBuilder . getQueryParams ( ) ; queryParams . clear ( ) ; SAMLObject outboundMessage = messageContext . getMessage ( ) ; if ( outboundMessage instanceof RequestAbstractType ) { queryParams . add ( new Pair <> ( "SAMLRequest" , message ) ) ; } else if ( outboundMessage instanceof StatusResponseType ) { queryParams . add ( new Pair <> ( "SAMLResponse" , message ) ) ; } else { throw new MessageEncodingException ( "SAML message is neither a SAML RequestAbstractType or StatusResponseType" ) ; } String relayState = SAMLBindingSupport . getRelayState ( messageContext ) ; if ( SAMLBindingSupport . checkRelayState ( relayState ) ) { queryParams . add ( new Pair <> ( "RelayState" , relayState ) ) ; } SignatureSigningParameters signingParameters = SAMLMessageSecuritySupport . getContextSigningParameters ( messageContext ) ; if ( signingParameters != null && signingParameters . getSigningCredential ( ) != null ) { String sigAlgURI = getSignatureAlgorithmURI ( signingParameters ) ; Pair < String , String > sigAlg = new Pair <> ( "SigAlg" , sigAlgURI ) ; queryParams . add ( sigAlg ) ; String sigMaterial = urlBuilder . buildQueryString ( ) ; queryParams . add ( new Pair <> ( "Signature" , generateSignature ( signingParameters . getSigningCredential ( ) , sigAlgURI , sigMaterial ) ) ) ; } else { log . debug ( "No signing credential was supplied, skipping HTTP-Redirect DEFLATE signing" ) ; } return urlBuilder . buildURL ( ) ; }
Builds the URL to redirect the client to .