Author: markt Date: Fri Jun 26 07:27:49 2015 New Revision: 1687687 URL: http://svn.apache.org/r1687687 Log: Use catalina context to configure jaspic provider Patch by fjodorver
Modified: tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/TomcatAuthConfig.java tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/TomcatAuthConfigProvider.java tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/TomcatServerAuthContext.java tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java Modified: tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/TomcatAuthConfig.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/TomcatAuthConfig.java?rev=1687687&r1=1687686&r2=1687687&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/TomcatAuthConfig.java (original) +++ tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/TomcatAuthConfig.java Fri Jun 26 07:27:49 2015 @@ -16,9 +16,6 @@ */ package org.apache.catalina.authenticator.jaspic.provider; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; import java.util.Map; import javax.security.auth.Subject; @@ -32,22 +29,27 @@ import org.apache.catalina.Realm; import org.apache.catalina.authenticator.jaspic.provider.modules.BasicAuthModule; import org.apache.catalina.authenticator.jaspic.provider.modules.DigestAuthModule; import org.apache.catalina.authenticator.jaspic.provider.modules.TomcatAuthModule; +import org.apache.tomcat.util.descriptor.web.LoginConfig; +import org.apache.tomcat.util.res.StringManager; public class TomcatAuthConfig implements ServerAuthConfig { + protected static final StringManager sm = StringManager.getManager(TomcatAuthConfig.class); private String messageLayer; private String appContext; private CallbackHandler handler; private TomcatServerAuthContext tomcatServerAuthContext; private Realm realm; + private LoginConfig loginConfig; public TomcatAuthConfig(String layer, String appContext, CallbackHandler callbackHandler, - Realm realm) { + Realm realm, LoginConfig loginConfig) { this.messageLayer = layer; this.appContext = appContext; this.handler = callbackHandler; this.realm = realm; + this.loginConfig = loginConfig; } @@ -70,8 +72,8 @@ public class TomcatAuthConfig implements @Override - public void refresh() { - + public synchronized void refresh() { + this.tomcatServerAuthContext = null; } @@ -86,16 +88,34 @@ public class TomcatAuthConfig implements public synchronized ServerAuthContext getAuthContext(String authContextID, Subject serviceSubject, Map properties) throws AuthException { if (this.tomcatServerAuthContext == null) { - this.tomcatServerAuthContext = new TomcatServerAuthContext(handler, getModules()); + this.tomcatServerAuthContext = new TomcatServerAuthContext(handler, getModule()); } return tomcatServerAuthContext; } - private Collection<TomcatAuthModule> getModules() { - List<TomcatAuthModule> modules = new ArrayList<>(); - modules.add(new BasicAuthModule()); - modules.add(new DigestAuthModule(realm)); - return modules; + private TomcatAuthModule getModule() throws AuthException { + String authMethod = getAuthMethod(); + switch (authMethod) { + case "BASIC": { + return new BasicAuthModule(); + } + case "DIGEST": { + return new DigestAuthModule(realm); + } + default: { + throw new AuthException( + sm.getString("authenticator.jaspic.unknownAuthType", authMethod)); + } + } + } + + + /** + * Temporary workaround to get authentication method + * @return + */ + private String getAuthMethod() { + return loginConfig.getAuthMethod().replace("JASPIC-", ""); } } Modified: tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/TomcatAuthConfigProvider.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/TomcatAuthConfigProvider.java?rev=1687687&r1=1687686&r2=1687687&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/TomcatAuthConfigProvider.java (original) +++ tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/TomcatAuthConfigProvider.java Fri Jun 26 07:27:49 2015 @@ -25,21 +25,21 @@ import javax.security.auth.message.confi import javax.security.auth.message.config.ClientAuthConfig; import javax.security.auth.message.config.ServerAuthConfig; +import org.apache.catalina.Context; import org.apache.catalina.Realm; +import org.apache.tomcat.util.descriptor.web.LoginConfig; public class TomcatAuthConfigProvider implements AuthConfigProvider { private Map<String, String> providerProperties; private ServerAuthConfig serverAuthConfig; private Realm realm; + private LoginConfig loginConfig; - public TomcatAuthConfigProvider() { - } - - - public TomcatAuthConfigProvider(Realm realm) { - this.realm = realm; + public TomcatAuthConfigProvider(Context context) { + this.realm = context.getRealm(); + this.loginConfig = context.getLoginConfig(); } @@ -62,7 +62,7 @@ public class TomcatAuthConfigProvider im public synchronized ServerAuthConfig getServerAuthConfig(String layer, String appContext, CallbackHandler handler) throws AuthException { if (this.serverAuthConfig == null) { - this.serverAuthConfig = new TomcatAuthConfig(layer, appContext, handler, realm); + this.serverAuthConfig = new TomcatAuthConfig(layer, appContext, handler, realm, loginConfig); } return this.serverAuthConfig; } Modified: tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/TomcatServerAuthContext.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/TomcatServerAuthContext.java?rev=1687687&r1=1687686&r2=1687687&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/TomcatServerAuthContext.java (original) +++ tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/TomcatServerAuthContext.java Fri Jun 26 07:27:49 2015 @@ -16,10 +16,7 @@ */ package org.apache.catalina.authenticator.jaspic.provider; -import java.util.Collection; import java.util.Collections; -import java.util.HashMap; -import java.util.Map; import javax.security.auth.Subject; import javax.security.auth.callback.CallbackHandler; @@ -29,8 +26,6 @@ import javax.security.auth.message.Messa import javax.security.auth.message.config.ServerAuthContext; import javax.security.auth.message.module.ServerAuthModule; -import org.apache.catalina.authenticator.jaspic.MessageInfoImpl; -import org.apache.catalina.authenticator.jaspic.provider.modules.TomcatAuthModule; import org.apache.tomcat.util.res.StringManager; /** @@ -40,29 +35,19 @@ public class TomcatServerAuthContext imp protected static final StringManager sm = StringManager.getManager(TomcatServerAuthContext.class); - private Map<String, ServerAuthModule> serverAuthModules = new HashMap<>(); + private ServerAuthModule module; - public TomcatServerAuthContext(CallbackHandler handler, Collection<TomcatAuthModule> modules) + public TomcatServerAuthContext(CallbackHandler handler, ServerAuthModule module) throws AuthException { - for (TomcatAuthModule module : modules) { - // TODO discuss message policies - module.initialize(null, null, handler, Collections.emptyMap()); - serverAuthModules.put(getAuthType(module), module); - } - } - - - private String getAuthType(TomcatAuthModule module) { - // TODO temporary workaround. In future JASPIC prefix will be removed - return "JASPIC-" + module.getAuthenticationType(); + this.module = module; + this.module.initialize(null, null, handler, Collections.emptyMap()); } @Override public AuthStatus validateRequest(MessageInfo messageInfo, Subject clientSubject, Subject serviceSubject) throws AuthException { - ServerAuthModule module = getAuthModule(messageInfo); return module.validateRequest(messageInfo, clientSubject, serviceSubject); } @@ -70,27 +55,14 @@ public class TomcatServerAuthContext imp @Override public AuthStatus secureResponse(MessageInfo messageInfo, Subject serviceSubject) throws AuthException { - ServerAuthModule module = getAuthModule(messageInfo); return module.secureResponse(messageInfo, serviceSubject); } @Override public void cleanSubject(MessageInfo messageInfo, Subject subject) throws AuthException { - ServerAuthModule module = getAuthModule(messageInfo); module.cleanSubject(messageInfo, subject); } - @SuppressWarnings("rawtypes") - private ServerAuthModule getAuthModule(MessageInfo messageInfo) throws AuthException { - Map properties = messageInfo.getMap(); - String authenticationType = (String) properties.get(MessageInfoImpl.AUTH_METHOD); - ServerAuthModule module = serverAuthModules.get(authenticationType); - if (module == null) { - throw new AuthException(sm.getString("authenticator.jaspic.unknownAuthType", - authenticationType)); - } - return module; - } } Modified: tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java?rev=1687687&r1=1687686&r2=1687687&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java (original) +++ tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java Fri Jun 26 07:27:49 2015 @@ -452,7 +452,7 @@ public class ContextConfig implements Li */ private JaspicAuthenticator configureDefaultJaspicAuthModules() { AuthConfigFactory authConfigFactory = AuthConfigFactory.getFactory(); - TomcatAuthConfigProvider provider = new TomcatAuthConfigProvider(context.getRealm()); + TomcatAuthConfigProvider provider = new TomcatAuthConfigProvider(context); authConfigFactory.registerConfigProvider(provider, JaspicAuthenticator.MESSAGE_LAYER, getJaspicAppContext(), "Tomcat Jaspic"); return new JaspicAuthenticator(); --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org