Skip to content

Commit

Permalink
JASPIC callback management moved to parent class
Browse files Browse the repository at this point in the history
Patch by fjodorver

git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1689078 13f79535-47bb-0310-9956-ffa450edef68
  • Loading branch information
markt-asf committed Jul 3, 2015
1 parent d67e9e2 commit 43f2ef3
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 31 deletions.
Expand Up @@ -29,8 +29,6 @@
import javax.security.auth.message.AuthStatus;
import javax.security.auth.message.MessageInfo;
import javax.security.auth.message.MessagePolicy;
import javax.security.auth.message.callback.CallerPrincipalCallback;
import javax.security.auth.message.callback.GroupPrincipalCallback;
import javax.security.auth.message.callback.PasswordValidationCallback;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
Expand Down Expand Up @@ -91,14 +89,7 @@ public AuthStatus validateRequest(MessageInfo messageInfo, Subject clientSubject
if (!passwordCallback.getResult()) {
sendUnauthorizedError(response, realmName);
}

GenericPrincipal principal = getPrincipal(passwordCallback);

CallerPrincipalCallback principalCallback = new CallerPrincipalCallback(clientSubject,
principal);
GroupPrincipalCallback groupCallback = new GroupPrincipalCallback(clientSubject,
principal.getRoles());
handler.handle(new Callback[] { principalCallback, groupCallback });
handlePrincipalCallbacks(clientSubject, getPrincipal(passwordCallback));
return AuthStatus.SUCCESS;

} catch (Exception e) {
Expand Down
Expand Up @@ -25,15 +25,12 @@
import java.util.Map;

import javax.security.auth.Subject;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;
import javax.security.auth.message.AuthException;
import javax.security.auth.message.AuthStatus;
import javax.security.auth.message.MessageInfo;
import javax.security.auth.message.MessagePolicy;
import javax.security.auth.message.callback.CallerPrincipalCallback;
import javax.security.auth.message.callback.GroupPrincipalCallback;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

Expand Down Expand Up @@ -259,11 +256,7 @@ public AuthStatus validateRequest(MessageInfo messageInfo, Subject clientSubject
}

try {
CallerPrincipalCallback principalCallback = new CallerPrincipalCallback(clientSubject,
principal);
String[] roles = realm.getRoles(principal);
GroupPrincipalCallback groupCallback = new GroupPrincipalCallback(clientSubject, roles);
handler.handle(new Callback[] { principalCallback, groupCallback });
handlePrincipalCallbacks(clientSubject, principal);
} catch (IOException | UnsupportedCallbackException e) {
throw new AuthException(e.getMessage());
}
Expand Down
Expand Up @@ -25,15 +25,12 @@
import java.util.Map;

import javax.security.auth.Subject;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;
import javax.security.auth.message.AuthException;
import javax.security.auth.message.AuthStatus;
import javax.security.auth.message.MessageInfo;
import javax.security.auth.message.MessagePolicy;
import javax.security.auth.message.callback.CallerPrincipalCallback;
import javax.security.auth.message.callback.GroupPrincipalCallback;
import javax.security.auth.message.callback.PasswordValidationCallback;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.Cookie;
Expand Down Expand Up @@ -312,16 +309,6 @@ private void handleSessionExpired(Request request, HttpServletResponse response)
}


private void handlePrincipalCallbacks(Subject clientSubject, Principal principal)
throws IOException, UnsupportedCallbackException {
CallerPrincipalCallback principalCallback = new CallerPrincipalCallback(clientSubject,
principal);
GroupPrincipalCallback groupCallback = new GroupPrincipalCallback(clientSubject, context
.getRealm().getRoles(principal));
handler.handle(new Callback[] { principalCallback, groupCallback });
}


@Override
public AuthStatus secureResponse(MessageInfo messageInfo, Subject serviceSubject)
throws AuthException {
Expand Down
Expand Up @@ -16,13 +16,20 @@
*/
package org.apache.catalina.authenticator.jaspic.provider.modules;

import java.io.IOException;
import java.security.Principal;
import java.util.Map;
import java.util.Optional;

import javax.security.auth.Subject;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;
import javax.security.auth.message.AuthException;
import javax.security.auth.message.MessageInfo;
import javax.security.auth.message.MessagePolicy;
import javax.security.auth.message.callback.CallerPrincipalCallback;
import javax.security.auth.message.callback.GroupPrincipalCallback;
import javax.security.auth.message.module.ServerAuthModule;

import org.apache.catalina.Context;
Expand Down Expand Up @@ -94,4 +101,22 @@ public String getRealmName() {
public abstract void initializeModule(MessagePolicy requestPolicy,
MessagePolicy responsePolicy, CallbackHandler handler, Map options)
throws AuthException;


/**
* Convert Tomcat's principal to JAAS subject using JASPIC callbacks
*
* @param clientSubject
* @param principal
* @throws IOException
* @throws UnsupportedCallbackException
*/
protected void handlePrincipalCallbacks(Subject clientSubject, Principal principal)
throws IOException, UnsupportedCallbackException {
CallerPrincipalCallback principalCallback = new CallerPrincipalCallback(clientSubject,
principal);
String[] roles = context.getRealm().getRoles(principal);
GroupPrincipalCallback groupCallback = new GroupPrincipalCallback(clientSubject, roles);
handler.handle(new Callback[] { principalCallback, groupCallback });
}
}

0 comments on commit 43f2ef3

Please sign in to comment.