Author: markt Date: Fri Jun 26 07:46:48 2015 New Revision: 1687700 URL: http://svn.apache.org/r1687700 Log: Remove realm name and authentication type from security messages, this information is set up per module now Patch by fjodorver
Modified: tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/JaspicAuthenticator.java tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/MessageInfoImpl.java tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/TomcatAuthConfig.java tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/TomcatServerAuthContext.java tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/modules/BasicAuthModule.java tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/modules/DigestAuthModule.java tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/modules/TomcatAuthModule.java Modified: tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/JaspicAuthenticator.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/JaspicAuthenticator.java?rev=1687700&r1=1687699&r2=1687700&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/JaspicAuthenticator.java (original) +++ tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/JaspicAuthenticator.java Fri Jun 26 07:46:48 2015 @@ -68,8 +68,7 @@ public class JaspicAuthenticator extends return true; } - MessageInfoImpl messageInfo = new MessageInfoImpl(request, response, true, getAuthMethod()); - messageInfo.setRealmName(getRealmName(context)); + MessageInfoImpl messageInfo = new MessageInfoImpl(request, response, true); AuthConfigFactory factory = AuthConfigFactory.getFactory(); String appContext = getAppContextId(request); Modified: tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/MessageInfoImpl.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/MessageInfoImpl.java?rev=1687700&r1=1687699&r2=1687700&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/MessageInfoImpl.java (original) +++ tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/MessageInfoImpl.java Fri Jun 26 07:46:48 2015 @@ -27,8 +27,6 @@ import org.apache.catalina.connector.Req public class MessageInfoImpl implements MessageInfo { public static final String IS_MANDATORY = "javax.security.auth.message.MessagePolicy.isMandatory"; - public static final String AUTH_METHOD = "javax.servlet.http.authType"; - public static final String REALM_NAME = "javax.servlet.http.realmName"; private final Map<String, Object> map = new HashMap<>(); private HttpServletRequest request; @@ -37,16 +35,10 @@ public class MessageInfoImpl implements public MessageInfoImpl() { } - public MessageInfoImpl(Request request, HttpServletResponse response, boolean authMandatory, - String authMethod) { + public MessageInfoImpl(Request request, HttpServletResponse response, boolean authMandatory) { this.request = request; this.response = response; map.put(IS_MANDATORY, Boolean.toString(authMandatory)); - map.put(AUTH_METHOD, authMethod); - } - - public void setRealmName(String realmName) { - map.put(REALM_NAME, realmName); } @Override 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=1687700&r1=1687699&r2=1687700&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:46:48 2015 @@ -16,6 +16,7 @@ */ package org.apache.catalina.authenticator.jaspic.provider; +import java.util.HashMap; import java.util.Map; import javax.security.auth.Subject; @@ -88,12 +89,20 @@ 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, getModule()); + this.tomcatServerAuthContext = new TomcatServerAuthContext(handler, getModule(), + getOptions()); } return tomcatServerAuthContext; } + private Map<String, String> getOptions() { + Map<String, String> options = new HashMap<>(); + options.put(TomcatAuthModule.REALM_NAME, getRealmName()); + return options; + } + + private TomcatAuthModule getModule() throws AuthException { String authMethod = getAuthMethod(); switch (authMethod) { @@ -111,6 +120,11 @@ public class TomcatAuthConfig implements } + private String getRealmName() { + return loginConfig.getRealmName(); + } + + /** * Temporary workaround to get authentication method * @return 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=1687700&r1=1687699&r2=1687700&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:46:48 2015 @@ -16,7 +16,7 @@ */ package org.apache.catalina.authenticator.jaspic.provider; -import java.util.Collections; +import java.util.Map; import javax.security.auth.Subject; import javax.security.auth.callback.CallbackHandler; @@ -33,15 +33,16 @@ import org.apache.tomcat.util.res.String */ public class TomcatServerAuthContext implements ServerAuthContext { - protected static final StringManager sm = StringManager.getManager(TomcatServerAuthContext.class); + protected static final StringManager sm = StringManager + .getManager(TomcatServerAuthContext.class); private ServerAuthModule module; - public TomcatServerAuthContext(CallbackHandler handler, ServerAuthModule module) - throws AuthException { + public TomcatServerAuthContext(CallbackHandler handler, ServerAuthModule module, + Map<String, String> options) throws AuthException { this.module = module; - this.module.initialize(null, null, handler, Collections.emptyMap()); + this.module.initialize(null, null, handler, options); } Modified: tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/modules/BasicAuthModule.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/modules/BasicAuthModule.java?rev=1687700&r1=1687699&r2=1687700&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/modules/BasicAuthModule.java (original) +++ tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/modules/BasicAuthModule.java Fri Jun 26 07:46:48 2015 @@ -45,14 +45,10 @@ public class BasicAuthModule extends Tom private Class<?>[] supportedMessageTypes = new Class[] { HttpServletRequest.class, HttpServletResponse.class }; - private CallbackHandler handler; - - @SuppressWarnings("rawtypes") @Override - public void initialize(MessagePolicy requestPolicy, MessagePolicy responsePolicy, + public void initializeModule(MessagePolicy requestPolicy, MessagePolicy responsePolicy, CallbackHandler handler, Map options) throws AuthException { - this.handler = handler; } @@ -67,7 +63,7 @@ public class BasicAuthModule extends Tom HttpServletResponse response = (HttpServletResponse) messageInfo.getResponseMessage(); String authorization = request.getHeader(AUTHORIZATION_HEADER); - String realmName = getRealmName(messageInfo); + String realmName = getRealmName(); if (authorization == null) { return sendUnauthorizedError(response, realmName); Modified: tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/modules/DigestAuthModule.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/modules/DigestAuthModule.java?rev=1687700&r1=1687699&r2=1687700&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/modules/DigestAuthModule.java (original) +++ tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/modules/DigestAuthModule.java Fri Jun 26 07:46:48 2015 @@ -180,9 +180,9 @@ public class DigestAuthModule extends To } - @SuppressWarnings("rawtypes") @Override - public void initialize(MessagePolicy requestPolicy, MessagePolicy responsePolicy, + @SuppressWarnings("rawtypes") + public void initializeModule(MessagePolicy requestPolicy, MessagePolicy responsePolicy, CallbackHandler handler, Map options) throws AuthException { this.handler = handler; startInternal(); @@ -238,12 +238,12 @@ public class DigestAuthModule extends To String authorization = request.getHeader(AUTHORIZATION_HEADER); DigestInfo digestInfo = new DigestInfo(getOpaque(), getNonceValidity(), getKey(), nonces, - isValidateUri()); + isValidateUri(), getRealmName()); if (authorization == null) { String nonce = generateNonce(request); - String authenticateHeader = getAuthenticateHeader(nonce, false, messageInfo); + String authenticateHeader = getAuthenticateHeader(nonce, false); return sendUnauthorizedError(response, authenticateHeader); } @@ -251,7 +251,7 @@ public class DigestAuthModule extends To return AuthStatus.SEND_FAILURE; } - if (digestInfo.validate(request, messageInfo)) { + if (digestInfo.validate(request)) { // TODO discuss a better way to get user roles principal = (GenericPrincipal) digestInfo.authenticate(realm); } @@ -259,7 +259,7 @@ public class DigestAuthModule extends To if (principal == null || digestInfo.isNonceStale()) { String nonce = generateNonce(request); boolean isNoncaneStale = principal != null && digestInfo.isNonceStale(); - String authenticateHeader = getAuthenticateHeader(nonce, isNoncaneStale, messageInfo); + String authenticateHeader = getAuthenticateHeader(nonce, isNoncaneStale); return sendUnauthorizedError(response, authenticateHeader); } @@ -389,10 +389,9 @@ public class DigestAuthModule extends To * @param nonce nonce token * @return */ - protected String getAuthenticateHeader(String nonce, boolean isNonceStale, - MessageInfo messageInfo) { + protected String getAuthenticateHeader(String nonce, boolean isNonceStale) { - String realmName = getRealmName(messageInfo); + String realmName = getRealmName(); String template = "Digest realm=\"{0}\", qop=\"{1}\", nonce=\"{2}\", opaque=\"{3}\""; String authenticateHeader = MessageFormat.format(template, realmName, QOP, nonce, @@ -425,13 +424,16 @@ public class DigestAuthModule extends To private boolean nonceStale = false; + private String contextRealmName; + public DigestInfo(String opaque, long nonceValidity, String key, - Map<String, NonceInfo> nonces, boolean validateUri) { + Map<String, NonceInfo> nonces, boolean validateUri, String contextRealmName) { this.opaque = opaque; this.nonceValidity = nonceValidity; this.key = key; this.nonces = nonces; this.validateUri = validateUri; + this.contextRealmName = contextRealmName; } public String getUsername() { @@ -470,7 +472,7 @@ public class DigestAuthModule extends To return true; } - public boolean validate(HttpServletRequest request, MessageInfo messageInfo) { + public boolean validate(HttpServletRequest request) { if ((userName == null) || (realmName == null) || (nonce == null) || (uri == null) || (response == null)) { return false; @@ -507,8 +509,7 @@ public class DigestAuthModule extends To } // Validate the Realm name - String lcRealm = getRealmName(messageInfo); - if (!lcRealm.equals(realmName)) { + if (!contextRealmName.equals(realmName)) { return false; } Modified: 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=1687700&r1=1687699&r2=1687700&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/modules/TomcatAuthModule.java (original) +++ tomcat/trunk/java/org/apache/catalina/authenticator/jaspic/provider/modules/TomcatAuthModule.java Fri Jun 26 07:46:48 2015 @@ -16,7 +16,13 @@ */ package org.apache.catalina.authenticator.jaspic.provider.modules; +import java.util.Map; +import java.util.Optional; + +import javax.security.auth.callback.CallbackHandler; +import javax.security.auth.message.AuthException; import javax.security.auth.message.MessageInfo; +import javax.security.auth.message.MessagePolicy; import javax.security.auth.message.module.ServerAuthModule; import org.apache.catalina.authenticator.jaspic.MessageInfoImpl; @@ -24,17 +30,21 @@ import org.apache.tomcat.util.res.String public abstract class TomcatAuthModule implements ServerAuthModule { + public static final String REALM_NAME = "javax.servlet.http.realmName"; + public static final String DEFAULT_REALM_NAME = "Authentication required"; + 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); + protected String realmName; + + protected CallbackHandler handler; + protected boolean isMandatory(MessageInfo messageInfo) { String mandatory = (String) messageInfo.getMap().get(MessageInfoImpl.IS_MANDATORY); @@ -42,11 +52,23 @@ public abstract class TomcatAuthModule i } - @SuppressWarnings("unchecked") - protected static String getRealmName(MessageInfo messageInfo) { - if (messageInfo == null) { - return REALM_NAME; - } - return (String) messageInfo.getMap().getOrDefault(MessageInfoImpl.REALM_NAME, REALM_NAME); + @SuppressWarnings("rawtypes") + @Override + public final void initialize(MessagePolicy requestPolicy, MessagePolicy responsePolicy, + CallbackHandler handler, Map options) throws AuthException { + this.handler = handler; + this.realmName = (String) options.get(REALM_NAME); + initializeModule(requestPolicy, responsePolicy, handler, options); + } + + + public String getRealmName() { + return Optional.of(realmName).orElse(DEFAULT_REALM_NAME); } + + + @SuppressWarnings("rawtypes") + public abstract void initializeModule(MessagePolicy requestPolicy, + MessagePolicy responsePolicy, CallbackHandler handler, Map options) + throws AuthException; } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org