in plugins/cxf/src/main/java/org/apache/cxf/fediz/cxf/plugin/FedizRedirectBindingFilter.java [281:328]
private boolean isLogoutRequest(ContainerRequestContext context, FedizContext fedConfig,
Message message, MultivaluedMap<String, String> params) {
boolean signout = false;
String logoutUrl = fedConfig.getLogoutURL();
if (params != null && fedConfig.getProtocol() instanceof FederationProtocol
&& FederationConstants.ACTION_SIGNOUT.equals(
params.getFirst(FederationConstants.PARAM_ACTION))) {
signout = true;
} else if (logoutUrl != null && !logoutUrl.isEmpty()) {
String requestPath = "/" + context.getUriInfo().getPath();
if (requestPath.equals(logoutUrl) || requestPath.equals(logoutUrl + "/")) {
signout = true;
}
}
if (signout) {
cleanupContext(message);
try {
FedizProcessor processor =
FedizProcessorFactory.newFedizProcessor(fedConfig.getProtocol());
HttpServletRequest request = messageContext.getHttpServletRequest();
RedirectionResponse redirectionResponse =
processor.createSignOutRequest(request, null, fedConfig); //TODO
String redirectURL = redirectionResponse.getRedirectionURL();
if (redirectURL != null) {
ResponseBuilder response = Response.seeOther(new URI(redirectURL));
Map<String, String> headers = redirectionResponse.getHeaders();
if (!headers.isEmpty()) {
for (Entry<String, String> entry : headers.entrySet()) {
response.header(entry.getKey(), entry.getValue());
}
}
context.abortWith(response.build());
return true;
}
} catch (Exception ex) {
LOG.debug(ex.getMessage(), ex);
throw ExceptionUtils.toInternalServerErrorException(ex, null);
}
}
return false;
}