Author: markt
Date: Tue Jun 23 09:41:20 2015
New Revision: 1687009
URL: http://svn.apache.org/r1687009
Log:
Implemented framework for default JASPIC modules registration
Patch by fjodorver
Added:
tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/
tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/TomcatAuthConfig.java
(with props)
tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/TomcatAuthConfigProvider.java
(with props)
tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/TomcatServerAuthContext.java
(with props)
tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/modules/
tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/modules/TomcatAuthModule.java
(with props)
Modified:
tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java
Added:
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=1687009&view=auto
==============================================================================
---
tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/TomcatAuthConfig.java
(added)
+++
tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/TomcatAuthConfig.java
Tue Jun 23 09:41:20 2015
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+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;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.message.AuthException;
+import javax.security.auth.message.MessageInfo;
+import javax.security.auth.message.config.ServerAuthConfig;
+import javax.security.auth.message.config.ServerAuthContext;
+
+import
org.apache.catalina.authenticator.jaspic.provider.modules.TomcatAuthModule;
+
+public class TomcatAuthConfig implements ServerAuthConfig {
+
+ private String messageLayer;
+ private String appContext;
+ private CallbackHandler handler;
+ private TomcatServerAuthContext tomcatServerAuthContext;
+
+
+ public TomcatAuthConfig(String layer, String appContext, CallbackHandler
callbackHandler) {
+ this.messageLayer = layer;
+ this.appContext = appContext;
+ this.handler = callbackHandler;
+ }
+
+
+ @Override
+ public String getMessageLayer() {
+ return messageLayer;
+ }
+
+
+ @Override
+ public String getAppContext() {
+ return appContext;
+ }
+
+
+ @Override
+ public String getAuthContextID(MessageInfo messageInfo) {
+ return messageInfo.toString();
+ }
+
+
+ @Override
+ public void refresh() {
+
+ }
+
+
+ @Override
+ public boolean isProtected() {
+ return false;
+ }
+
+
+ @Override
+ @SuppressWarnings("rawtypes")
+ public synchronized ServerAuthContext getAuthContext(String authContextID,
+ Subject serviceSubject, Map properties) throws AuthException {
+ if (this.tomcatServerAuthContext == null) {
+ this.tomcatServerAuthContext = new
TomcatServerAuthContext(handler, getModules());
+ }
+ return tomcatServerAuthContext;
+ }
+
+
+ private Collection<TomcatAuthModule> getModules() {
+ List<TomcatAuthModule> modules = new ArrayList<>();
+ return modules;
+ }
+}
Propchange:
tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/TomcatAuthConfig.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
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=1687009&view=auto
==============================================================================
---
tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/TomcatAuthConfigProvider.java
(added)
+++
tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/TomcatAuthConfigProvider.java
Tue Jun 23 09:41:20 2015
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.catalina.authenticator.jaspic.provider;
+
+import java.util.Map;
+
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.message.AuthException;
+import javax.security.auth.message.config.AuthConfigFactory;
+import javax.security.auth.message.config.AuthConfigProvider;
+import javax.security.auth.message.config.ClientAuthConfig;
+import javax.security.auth.message.config.ServerAuthConfig;
+
+public class TomcatAuthConfigProvider implements AuthConfigProvider {
+
+ private Map<String, String> providerProperties;
+ private ServerAuthConfig serverAuthConfig;
+
+
+ public TomcatAuthConfigProvider() {
+ }
+
+
+ public TomcatAuthConfigProvider(Map<String, String> properties,
AuthConfigFactory factory) {
+ this.providerProperties = properties;
+ if (factory != null) {
+ factory.registerConfigProvider(this, null, null, "Auto
registration");
+ }
+ }
+
+
+ @Override
+ public ClientAuthConfig getClientAuthConfig(String layer, String
appContext,
+ CallbackHandler handler) throws AuthException {
+ return null;
+ }
+
+
+ @Override
+ public synchronized ServerAuthConfig getServerAuthConfig(String layer,
String appContext,
+ CallbackHandler handler) throws AuthException {
+ if (this.serverAuthConfig == null) {
+ this.serverAuthConfig = new TomcatAuthConfig(layer, appContext,
handler);
+ }
+ return this.serverAuthConfig;
+ }
+
+
+ @Override
+ public void refresh() {
+ serverAuthConfig.refresh();
+ }
+}
Propchange:
tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/TomcatAuthConfigProvider.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
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=1687009&view=auto
==============================================================================
---
tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/TomcatServerAuthContext.java
(added)
+++
tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/TomcatServerAuthContext.java
Tue Jun 23 09:41:20 2015
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+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;
+import javax.security.auth.message.AuthException;
+import javax.security.auth.message.AuthStatus;
+import javax.security.auth.message.MessageInfo;
+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;
+
+/**
+ * This class contains references to different JASPIC modules.
+ */
+public class TomcatServerAuthContext implements ServerAuthContext {
+
+ private Map<String, ServerAuthModule> serverAuthModules = new HashMap<>();
+
+
+ public TomcatServerAuthContext(CallbackHandler handler,
Collection<TomcatAuthModule> modules)
+ 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();
+ }
+
+
+ @Override
+ public AuthStatus validateRequest(MessageInfo messageInfo, Subject
clientSubject,
+ Subject serviceSubject) throws AuthException {
+ ServerAuthModule module = getAuthModule(messageInfo);
+ return module.validateRequest(messageInfo, clientSubject,
serviceSubject);
+ }
+
+
+ @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("Unknown auth module");// TODO message i18n
+ }
+ return module;
+ }
+}
Propchange:
tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/TomcatServerAuthContext.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/modules/TomcatAuthModule.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/modules/TomcatAuthModule.java?rev=1687009&view=auto
==============================================================================
---
tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/modules/TomcatAuthModule.java
(added)
+++
tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/modules/TomcatAuthModule.java
Tue Jun 23 09:41:20 2015
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.catalina.authenticator.jaspic.provider.modules;
+
+import javax.security.auth.message.MessageInfo;
+import javax.security.auth.message.module.ServerAuthModule;
+
+import org.apache.catalina.authenticator.jaspic.MessageInfoImpl;
+import org.apache.tomcat.util.res.StringManager;
+
+public abstract class TomcatAuthModule implements ServerAuthModule {
+
+ protected static final String AUTH_HEADER_NAME = "WWW-Authenticate";
+ protected static final String AUTHORIZATION_HEADER = "authorization";
+ /**
+ * Default authentication realm name.
+ */
+ protected static final String REALM_NAME = "Authentication required";
+ /**
+ * The string manager for this package.
+ */
+ protected static final StringManager sm =
StringManager.getManager(TomcatAuthModule.class);
+
+
+ public abstract String getAuthenticationType();
+
+
+ protected boolean isMandatory(MessageInfo messageInfo) {
+ String mandatory = (String)
messageInfo.getMap().get(MessageInfoImpl.IS_MANDATORY);
+ return Boolean.valueOf(mandatory).booleanValue();
+ }
+
+
+ protected static String getRealmName(MessageInfo messageInfo) {
+ if (messageInfo == null) {
+ return REALM_NAME;
+ }
+ // TODO get realm name from message
+ return REALM_NAME;
+ }
+}
Propchange:
tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/modules/TomcatAuthModule.java
------------------------------------------------------------------------------
svn:eol-style = native
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=1687009&r1=1687008&r2=1687009&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java (original)
+++ tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java Tue Jun 23
09:41:20 2015
@@ -39,6 +39,7 @@ import java.util.Properties;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
+import javax.security.auth.message.config.AuthConfigFactory;
import javax.servlet.MultipartConfigElement;
import javax.servlet.ServletContainerInitializer;
import javax.servlet.ServletContext;
@@ -61,6 +62,8 @@ import org.apache.catalina.Valve;
import org.apache.catalina.WebResource;
import org.apache.catalina.WebResourceRoot;
import org.apache.catalina.Wrapper;
+import org.apache.catalina.authenticator.jaspic.JaspicAuthenticator;
+import
org.apache.catalina.authenticator.jaspic.provider.TomcatAuthConfigProvider;
import org.apache.catalina.core.StandardContext;
import org.apache.catalina.core.StandardHost;
import org.apache.catalina.util.ContextName;
@@ -388,6 +391,15 @@ public class ContextConfig implements Li
authenticator = (Valve)
customAuthenticators.get(loginConfig.getAuthMethod());
}
+
+ if (authenticator == null) {
+ String authMethod = loginConfig.getAuthMethod();
+ if (authMethod != null && authMethod.contains("JASPIC")) {
+ //TODO temporary workaround, Jaspic should be enabled by
default
+ authenticator = configureDefaultJaspicAuthModules();
+ }
+ }
+
if (authenticator == null) {
if (authenticators == null) {
log.error(sm.getString("contextConfig.authenticatorResources"));
@@ -434,6 +446,18 @@ public class ContextConfig implements Li
}
+ /**
+ * Configure and register default JASPIC modules
+ * @return
+ */
+ private JaspicAuthenticator configureDefaultJaspicAuthModules() {
+ AuthConfigFactory authConfigFactory = AuthConfigFactory.getFactory();
+ authConfigFactory.registerConfigProvider(new
TomcatAuthConfigProvider(),
+ JaspicAuthenticator.MESSAGE_LAYER, null, "Tomcat Jaspic");
+ return new JaspicAuthenticator();
+ }
+
+
/**
* Create (if necessary) and return a Digester configured to process the
* context configuration descriptor for an application.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]