package org.apereo.cas.support.pac4j.web.flow; import org.apereo.cas.web.support.WebUtils; import org.pac4j.core.client.Clients; import org.pac4j.core.context.J2EContext; import org.pac4j.core.redirect.RedirectAction; import org.pac4j.saml.client.SAML2Client; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.webflow.action.AbstractAction; import org.springframework.webflow.execution.Event; import org.springframework.webflow.execution.RequestContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * This is {@link SAML2ClientLogoutAction}. * * @author Misagh Moayyed * @since 5.1.0 */ public class SAML2ClientLogoutAction extends AbstractAction { private static final Logger LOGGER = LoggerFactory.getLogger(SAML2ClientLogoutAction.class); private final Clients clients; public SAML2ClientLogoutAction(final Clients clients) { this.clients = clients; } @Override protected Event doExecute(final RequestContext requestContext) throws Exception { try { final HttpServletRequest request = WebUtils.getHttpServletRequest(requestContext); final HttpServletResponse response = WebUtils.getHttpServletResponse(requestContext); final J2EContext context = WebUtils.getPac4jJ2EContext(request, response); final SAML2Client client = clients.findClient(SAML2Client.class); if (client != null) { LOGGER.debug("Located SAML2 client [{}]", client); final RedirectAction action = client.getLogoutAction(context, null, null); LOGGER.debug("Preparing logout message to send is [{}]", action.getLocation()); action.perform(context); } } catch (final Exception e) { LOGGER.warn(e.getMessage(), e); } return null; } }