Support logging out via WS-Federation for the CXF plugin

Project: http://git-wip-us.apache.org/repos/asf/cxf-fediz/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf-fediz/commit/9d69acaf
Tree: http://git-wip-us.apache.org/repos/asf/cxf-fediz/tree/9d69acaf
Diff: http://git-wip-us.apache.org/repos/asf/cxf-fediz/diff/9d69acaf

Branch: refs/heads/1.3.x-fixes
Commit: 9d69acaf58b30924ec1edac5c298027ee555ebbe
Parents: 20b9717
Author: Colm O hEigeartaigh <[email protected]>
Authored: Tue Dec 6 17:59:23 2016 +0000
Committer: Colm O hEigeartaigh <[email protected]>
Committed: Wed Dec 7 12:14:02 2016 +0000

----------------------------------------------------------------------
 .../cxf/plugin/FedizRedirectBindingFilter.java  | 73 +++++++++++---------
 1 file changed, 41 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf-fediz/blob/9d69acaf/plugins/cxf/src/main/java/org/apache/cxf/fediz/cxf/plugin/FedizRedirectBindingFilter.java
----------------------------------------------------------------------
diff --git 
a/plugins/cxf/src/main/java/org/apache/cxf/fediz/cxf/plugin/FedizRedirectBindingFilter.java
 
b/plugins/cxf/src/main/java/org/apache/cxf/fediz/cxf/plugin/FedizRedirectBindingFilter.java
index 832d7bb..b7e9d7a 100644
--- 
a/plugins/cxf/src/main/java/org/apache/cxf/fediz/cxf/plugin/FedizRedirectBindingFilter.java
+++ 
b/plugins/cxf/src/main/java/org/apache/cxf/fediz/cxf/plugin/FedizRedirectBindingFilter.java
@@ -90,11 +90,6 @@ public class FedizRedirectBindingFilter extends 
AbstractServiceProviderFilter
             return;
         }
 
-        // See if it is a Logout request
-        if (isLogoutRequest(context, m, fedConfig)) {
-            return;
-        }
-        
         String httpMethod = context.getMethod();
         MultivaluedMap<String, String> params = null;
         
@@ -110,6 +105,11 @@ public class FedizRedirectBindingFilter extends 
AbstractServiceProviderFilter
             throw ExceptionUtils.toInternalServerErrorException(ex, null);
         }
         
+        // See if it is a Logout request
+        if (isLogoutRequest(context, m, fedConfig, params)) {
+            return;
+        }
+        
         if (isSignoutCleanupRequest(fedConfig, m, params)) {
             return;
         } else if (checkSecurityContext(fedConfig, m)) {
@@ -289,39 +289,48 @@ public class FedizRedirectBindingFilter extends 
AbstractServiceProviderFilter
     }
     
     private boolean isLogoutRequest(ContainerRequestContext context, Message 
message,
-                                    FedizContext fedConfig) {
-        //logout
+                                    FedizContext fedConfig, 
MultivaluedMap<String, String> params) {
+
+        boolean signout = false;
         String logoutUrl = fedConfig.getLogoutURL();
-        if (logoutUrl != null && !logoutUrl.isEmpty()) {
+        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 
+ "/")) {
-                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());
-                            }
+                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);
+
+                    context.abortWith(response.build());
+
+                    return true;
                 }
+            } catch (Exception ex) {
+                LOG.debug(ex.getMessage(), ex);
+                throw ExceptionUtils.toInternalServerErrorException(ex, null);
             }
         }
         

Reply via email to