Author: markt
Date: Thu Aug  4 16:36:44 2016
New Revision: 1755206

URL: http://svn.apache.org/viewvc?rev=1755206&view=rev
Log:
Reduce duplication

Modified:
    tomcat/trunk/java/org/apache/catalina/authenticator/AuthenticatorBase.java

Modified: 
tomcat/trunk/java/org/apache/catalina/authenticator/AuthenticatorBase.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/authenticator/AuthenticatorBase.java?rev=1755206&r1=1755205&r2=1755206&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/authenticator/AuthenticatorBase.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/authenticator/AuthenticatorBase.java 
Thu Aug  4 16:36:44 2016
@@ -534,8 +534,7 @@ public abstract class AuthenticatorBase
             authRequired = certs != null && certs.length > 0;
         }
 
-        MessageInfo messageInfo = null;
-        ServerAuthContext serverAuthContext = null;
+        JaspicState jaspicState = null;
 
         if (authRequired) {
             if (log.isDebugEnabled()) {
@@ -543,22 +542,14 @@ public abstract class AuthenticatorBase
             }
 
             if (jaspicProvider != null) {
-                messageInfo = new MessageInfoImpl(request.getRequest(), 
response.getResponse(), true);
-                try {
-                    ServerAuthConfig serverAuthConfig = 
jaspicProvider.getServerAuthConfig(
-                            "HttpServlet", jaspicAppContextID, 
CallbackHandlerImpl.getInstance());
-                    String authContextID = 
serverAuthConfig.getAuthContextID(messageInfo);
-                    serverAuthContext = 
serverAuthConfig.getAuthContext(authContextID, null, null);
-                } catch (AuthException e) {
-                    
log.warn(sm.getString("authenticator.jaspicServerAuthContextFail"), e);
-                    
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+                jaspicState = getJaspicState(jaspicProvider, request, 
response);
+                if (jaspicState == null) {
                     return;
                 }
             }
 
             if (jaspicProvider == null && !doAuthenticate(request, response) ||
-                    jaspicProvider != null && !authenticateJaspic(
-                            request, response, serverAuthContext, 
messageInfo)) {
+                    jaspicProvider != null && !authenticateJaspic(request, 
response, jaspicState)) {
                 if (log.isDebugEnabled()) {
                     log.debug(" Failed authenticate() test");
                 }
@@ -593,14 +584,8 @@ public abstract class AuthenticatorBase
         }
         getNext().invoke(request, response);
 
-        if (serverAuthContext != null && messageInfo != null) {
-            try {
-                serverAuthContext.secureResponse(messageInfo, null);
-                request.setRequest((HttpServletRequest) 
messageInfo.getRequestMessage());
-                response.setResponse((HttpServletResponse) 
messageInfo.getResponseMessage());
-            } catch (AuthException e) {
-                
log.warn(sm.getString("authenticator.jaspicSecureResponseFail"), e);
-            }
+        if (jaspicProvider != null) {
+            secureResponseJspic(request, response, jaspicState);
         }
     }
 
@@ -615,36 +600,53 @@ public abstract class AuthenticatorBase
             return doAuthenticate(request, httpResponse);
         } else {
             Response response = request.getResponse();
-            MessageInfo messageInfo =
-                    new MessageInfoImpl(request.getRequest(), 
response.getResponse(), true);
-            ServerAuthContext serverAuthContext = null;
-
-            try {
-                ServerAuthConfig serverAuthConfig = 
jaspicProvider.getServerAuthConfig(
-                        "HttpServlet", jaspicAppContextID, 
CallbackHandlerImpl.getInstance());
-                String authContextID = 
serverAuthConfig.getAuthContextID(messageInfo);
-                serverAuthContext = 
serverAuthConfig.getAuthContext(authContextID, null, null);
-            } catch (AuthException e) {
-                
log.warn(sm.getString("authenticator.jaspicServerAuthContextFail"), e);
-                
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+            JaspicState jaspicState = getJaspicState(jaspicProvider, request, 
response);
+            if (jaspicState == null) {
                 return false;
             }
 
-            boolean result = authenticateJaspic(request, response, 
serverAuthContext, messageInfo);
+            boolean result = authenticateJaspic(request, response, 
jaspicState);
 
-            try {
-                serverAuthContext.secureResponse(messageInfo, null);
-                request.setRequest((HttpServletRequest) 
messageInfo.getRequestMessage());
-                response.setResponse((HttpServletResponse) 
messageInfo.getResponseMessage());
-            } catch (AuthException e) {
-                
log.warn(sm.getString("authenticator.jaspicSecureResponseFail"), e);
-            }
+            secureResponseJspic(request, response, jaspicState);
 
             return result;
         }
     }
 
 
+    private void secureResponseJspic(Request request, Response response, 
JaspicState state) {
+        try {
+            state.serverAuthContext.secureResponse(state.messageInfo, null);
+            request.setRequest((HttpServletRequest) 
state.messageInfo.getRequestMessage());
+            response.setResponse((HttpServletResponse) 
state.messageInfo.getResponseMessage());
+        } catch (AuthException e) {
+            log.warn(sm.getString("authenticator.jaspicSecureResponseFail"), 
e);
+        }
+    }
+
+
+    private JaspicState getJaspicState(AuthConfigProvider jaspicProvider, 
Request request,
+            Response response) throws IOException {
+        JaspicState jaspicState = new JaspicState();
+
+        jaspicState.messageInfo =
+                new MessageInfoImpl(request.getRequest(), 
response.getResponse(), true);
+
+        try {
+            ServerAuthConfig serverAuthConfig = 
jaspicProvider.getServerAuthConfig(
+                    "HttpServlet", jaspicAppContextID, 
CallbackHandlerImpl.getInstance());
+            String authContextID = 
serverAuthConfig.getAuthContextID(jaspicState.messageInfo);
+            jaspicState.serverAuthContext = 
serverAuthConfig.getAuthContext(authContextID, null, null);
+        } catch (AuthException e) {
+            
log.warn(sm.getString("authenticator.jaspicServerAuthContextFail"), e);
+            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+            return null;
+        }
+
+        return jaspicState;
+    }
+
+
     // ------------------------------------------------------ Protected Methods
 
     /**
@@ -728,21 +730,20 @@ public abstract class AuthenticatorBase
     }
 
 
-    private boolean authenticateJaspic(Request request, Response response,
-            ServerAuthContext serverAuthContext, MessageInfo messageInfo) {
+    private boolean authenticateJaspic(Request request, Response response, 
JaspicState state) {
 
         boolean cachedAuth = checkForCachedAuthentication(request, response, 
false);
         Subject client = new Subject();
         AuthStatus authStatus;
         try {
-            authStatus = serverAuthContext.validateRequest(messageInfo, 
client, null);
+            authStatus = 
state.serverAuthContext.validateRequest(state.messageInfo, client, null);
         } catch (AuthException e) {
             log.debug(sm.getString("authenticator.loginFail"), e);
             return false;
         }
 
-        request.setRequest((HttpServletRequest) 
messageInfo.getRequestMessage());
-        response.setResponse((HttpServletResponse) 
messageInfo.getResponseMessage());
+        request.setRequest((HttpServletRequest) 
state.messageInfo.getRequestMessage());
+        response.setResponse((HttpServletResponse) 
state.messageInfo.getResponseMessage());
 
         if (authStatus == AuthStatus.SUCCESS) {
             GenericPrincipal principal = getPrincipal(client);
@@ -758,7 +759,7 @@ public abstract class AuthenticatorBase
                 // cached and the Principal did not change.
                 request.setNote(Constants.REQ_JASPIC_SUBJECT_NOTE, client);
                 @SuppressWarnings("rawtypes")// JASPIC API uses raw types
-                Map map = messageInfo.getMap();
+                Map map = state.messageInfo.getMap();
                 if (map != null && 
map.containsKey("javax.servlet.http.registerSession")) {
                     register(request, response, principal, "JASPIC", null, 
null, true, true);
                 } else {
@@ -1184,4 +1185,10 @@ public abstract class AuthenticatorBase
                 this);
         jaspicProvider = provider;
     }
+
+
+    private static class JaspicState {
+        public MessageInfo messageInfo = null;
+        public ServerAuthContext serverAuthContext = null;
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to