{
SAML2Object samlObject = request.getSAML2Object();
if(samlObject instanceof LogoutRequestType == false)
return;
LogoutRequestType logOutRequest = (LogoutRequestType) samlObject;
HTTPContext httpContext = (HTTPContext) request.getContext();
HttpServletRequest servletRequest = httpContext.getRequest();
HttpSession session = servletRequest.getSession(false);
String relayState = servletRequest.getParameter("RelayState");
session.invalidate(); //Invalidate the current session at the SP
//Generate a Logout Response
StatusResponseType statusResponse = objectFactory.createStatusResponseType();
//Status
StatusType statusType = objectFactory.createStatusType();
StatusCodeType statusCodeType = objectFactory.createStatusCodeType();
statusCodeType.setValue(JBossSAMLURIConstants.STATUS_RESPONDER.get());
//2nd level status code
StatusCodeType status2ndLevel = objectFactory.createStatusCodeType();
status2ndLevel.setValue(JBossSAMLURIConstants.STATUS_SUCCESS.get());
statusCodeType.setStatusCode(status2ndLevel);
statusType.setStatusCode(statusCodeType);
statusResponse.setStatus(statusType);
try
{
statusResponse.setIssueInstant(XMLTimeUtil.getIssueInstant());
}
catch (ConfigurationException e)
{
throw new ProcessingException(e);
}
statusResponse.setInResponseTo(logOutRequest.getID());
statusResponse.setID(IDGenerator.create("ID_"));
statusResponse.setIssuer(request.getIssuer());
SAML2Response saml2Response = new SAML2Response();
try
{
response.setResultingDocument(saml2Response.convert(statusResponse));
}
catch(Exception je)
{
throw new ProcessingException(je);
}
response.setRelayState(relayState);
response.setDestination(logOutRequest.getIssuer().getValue());
}