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